В Вашем втором примере, путем размещения var и var2 на отдельных строках, это делает команду тем же как
while var=9876; var2=765; read line
while
команда допускает список команд прежде, чем выполнить команды в - цикл с условием продолжения. help while
шоу это:
в то время как: в то время как КОМАНДЫ; сделайте КОМАНДЫ;готово
Выполните команды, пока тест успешно выполняется.
Разверните и выполните КОМАНДЫ пока заключительная команда в
'в то время как' КОМАНДЫ имеют статус выхода нуля.
Статус выхода: Возвращает состояние последней выполняемой команды.
С другой стороны, когда переменное присвоение предшествует команде (в этом случае read
), и то присвоение только сопровождается пробелом, объем той переменной локален для команды ONLY! (внутренне)...
См.: В, 'в то время как IFS = чтение..', почему IFS не имеет никакого эффекта?
Я не знал, что удар мог сделать те вещи, поэтому благодарит отправить их.
Вот мое объяснение.
Эта строка в Вашем первом сценарии:
while var=9876 var2=765 read line
на самом деле устанавливает переменную среды, названную "var" для оценки "9876", и устанавливает другую переменную среды, названную "var2" для оценки "765", но только для команды read line
. Это - странная старая школьная оболочка "функция". Вот почему строка echo $var $var2
только распечатывает "1234" - переменная среды, названная "var" только, относится read line
.
Второй сценарий, где переменные присвоения и read line
появитесь на различных строках, я думаю, что это присваивает переменные оболочки, названные "var" и "var2" каждый раз через цикл.
read
сделать, чтобы локальная IFS оценила, затемIFS='?' read
единственный путь. Обратите внимание что все команды междуwhile
иdo
названы последовательно каждый раз, когда это циклично выполняется.while
только выходы, когда последняя команда выходит с ненулевым. Мудрый конструкциейread
независимо от, 'делают - сделанный' блок. У Вас мог быть свой-материал в команде, помещенной междуread
иdo
и ничего не имейте вdo-while
. Однако для отъезда цикла с условием продолжения бремя находится на последней команде, которая выйдет с ненулевым значением в подходящее время. – Peter.O 07.11.2011, 14:47