Я не могу понять результаты скрипта bash

Вот сценарий:

echo '1 2 3 4 5 6' | while read abc ;do echo result: $c $b $a; done 

Результат 3 4 5 6 2 1 Может кто-нибудь объяснить, почему?

2 Solutions collect form web for “Я не могу понять результаты скрипта bash”

Окончательные данные по строке будут помещены в последнюю переменную, т. Е. c содержит «3 4 5 6». Поэтому вы, вероятно, хотите:

 echo '1 2 3 4 5 6' | while read abc rest ;do echo result: $c $b $a; done 

и игнорировать переменный rest .

read разбивает каждую строку стандартного ввода на слова так же, как ваша команда делает, когда вы пишете команды. После этого :

первое слово присваивается первому имени, второму слову второму имени и т. д., с остальными словами и их промежуточными разделителями, назначенными на фамилию

В вашем случае a присваивается значение 1, b присваивается значение 2, а c получает оставшуюся часть строки «3 4 5 6». Вы распечатываете c ( 3 4 5 6 ), затем b ( 2 ), затем a ( 1 ), давая вам вывод, который вы видите.

В этом случае цикл ничего не делает, так как есть только одна строка для чтения из вашего первого echo .

  • В то время как цикл занимает больше времени для завершения
  • Как stdin обрабатывается в этом сценарии bash?
  • Когда использовать #! / Bin / ksh и #! / Bin / sh? Нужен пример
  • Как разбить текстовый файл на новые файлы
  • BASH: получение хэш-файла md5 на удаленном сервере
  • Сценарий Bash не работает, не меняет каталог
  • Escape [в grep
  • Как я могу использовать регулярное выражение для извлечения текста, следующего за двумя условиями, в переменную?
  • Как удалить новую строку перед EOF в файле text / csv через bash
  • переменная pass в ssh
  • Как использовать namedpipe как временный файл?
  • Необходимо получить выход Awk в определенной последовательности
  • Linux и Unix - лучшая ОС в мире.