ubuntu 16.04 Проблема GNU GRUB - двойная загрузка

Переписывание цикла таким образом показывает, что происходит:

echo '1 2 3 4 5 6' | while read a b c
  do
    echo '(iteration beginning)' a="$a" b="$b" c="$c" '(iteration ending)'
  done

Это дает в качестве вывода:

(iteration beginning) a=1 b=2 c=3 4 5 6 (iteration ending)

Обратите внимание, что сначала выполняется только одна команда эха , Если он был запущен более одного раза, вы, между прочим, могли бы видеть подстроки (iteration beginning) и (iteration ending), напечатанные более одного раза.

Это означает, что здесь есть while на самом деле ничего не добиться. Встроенный модуль read считывает текст, разделенный пробелами, в каждую указанную переменную. Дополнительный ввод добавляется к концу последней указанной переменной.2 Таким образом, переменные a и b принимают значения 1 и 2 соответственно, а c принимает значение 3 4 5 6.

Когда условие цикла (while read a b c) оценивается во второй раз, из канала больше не поступает вход (мы передавали только одну строку текста), поэтому команда read вычисляет значение false вместо

1: Чтобы быть техническим и конкретным, встроенная функция read при передаче имен переменных в качестве аргументов считывает ввод, разделяет его

1: быть техническим и конкретным, встроенный read при передаче имен переменных в качестве аргументов , читает ввод, разбивая его на отдельные слова, когда он встречает пробелы IFS (см. также этот вопрос и эту статью).

0
задан 21 January 2018 в 21:18

0 ответов

Другие вопросы по тегам:

Похожие вопросы: