1

Я пишу очень простой сценарий и застрял на чем-то глупом. В основном у меня есть текстовый файл, в котором каждая строка состоит из 3 слов, разделенных пробелом. Когда вы просматриваете файл, он показывает все правильно. Например, загрузка файла выглядит примерно так:

bird dog mouse
ferret bunny hare

Я делаю простой цикл, как это:

for line in $(cat pets.txt)
do
     echo $line
     "command $line"
done

Эхо показывает проблему. Команду нужно запустить как

command bird dog mouse

и вместо этого он работает как

command bird
command dog
command mouse

Кажется, это должно быть простое исправление, но я не могу правильно сформулировать условия поиска, чтобы найти решение.

Спасибо!

1 ответ1

5

Проблема заключается в том, что использование cat в подстановке подобного типа заставит bash токенизировать вывод в соответствии с IFS , который по умолчанию включает пробелы. Это нормальное поведение для цикла for . Вероятно, самое простое решение:

while read line
do
     echo $line
     command $line
done < pets.txt

Обратите внимание, что bash будет разбивать аргументы до command . Если вы хотите строку как один аргумент, просто заключите ее в кавычки:

while read line
do
     echo $line
     command "$line"
done < pets.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .