Как перебирать переменные

Как перебирать переменные

У меня есть команда в моем скрипте csh, которая может выдавать как минимум 2 строки вывода, но может быть и больше. Я превращаю эти строки в отдельные переменные, которые затем хочу передать другой команде. Как мне настроить вторую команду на цикл и запуск для каждой переменной, выведенной командой 1? Ниже приведено то, что у меня есть, что превращает вывод команды 1 в переменные.

set vars = `echo "command 1"`

set numRows = $#vars  
if ($numRows < 2) then  
        echo "ERROR! $numRows rows!"  
        exit  
endif  


`echo '/command2 -L '$vars[1]'`

решение1

Обратите внимание, я использую bash, а не csh, потому что я не ненавижу себя. Но вы можете сделать все это в csh, вам просто придется перевести. Если вы хотите работать в bash, просто сначала запустите "bash --login", а затем вы работаете в bash.

Чтобы выполнить задачу, которую вы описываете в скрипте оболочки, мы используем каналы, а не циклы, как в языке программирования. Не поймите меня неправильно, тамявляютсяциклические структуры в csh и bash, но для того, что вы описали, мы делаем это по-другому.

Если бы у меня была команда, которая выводит несколько строк, и я хотел бы, чтобы другая команда обрабатывала эти строки по одной, я бы соединил две команды вертикальной чертой | , например, так:

cat file.txt | grep "некоторые слова"

Команда grep обрабатывает каждую строку, поступающую из STDIN, которая связана каналом со STDOUT команды cat. Это тривиальный пример, но он служит.

другой:

echo 'один,два,три' | tr ',' '\n'

Это заменит все запятые на символы новой строки, создав трехстрочный вывод из однострочного ввода.

Если бы я хотел добавить расширение к именам всех файлов в каталоге, я мог бы сделать что-то вроде этого:

cd directory
for filename in *
do
  mv ${filename} ${filename}.extension
done

* — это шаблон подстановки файлов. Подстановка файлов — это когда шаблон в командной строке заменяется любым именем файла в текущем каталоге, которое соответствует шаблону подстановки. * означает «что угодно»

Связанный контент