что значит while read oldrev newrev ref?
пробую выполнить файл с кодом
while read oldrev newrev ref
do
echo "Ref $ref received."
done
после выполнения ввожу в консоль "любое значение" и ожидаю увидеть в ответе:
Ref любое значение received.
но там
Ref received.
То есть значение пустое.
Так ли оно должно работать, как я ожидаю?
Ответы (1 шт):
вопрос относится не к программе git, а к программе bash (как следует из содержимого файла по приведённой ссылке), являющейся одной из реализаций posix-совместимой оболочки.
согласно стандарту posix, программа или встроенная в оболочку команда read должна прочитать одну строку из стандартного ввода, разбить её на слова, руководствуясь символами-разделителями из переменной окружения IFS (по умолчанию — <space><tab><newline>), и присвоить их последовательно переменным окружения, имена которых переданы этой команде/программе в качестве аргументов.
в вашем случае на стандартный ввод команде/программе read передаётся строка, состоящая из двух слов — любое значение, а аргументов ей передаётся три — oldrev newrev ref.
соответственно, первое слово (любое) присваивается переменной окружения oldrev, второе слово (значение) присваивается переменной newrev, а переменной ref ничего не присваивается — недостаточно слов было передано.
while список1; do список2; done — это составная команда для организации цикла: сначала выполняется набор команд список1, если он завершился с ненулевым кодом возврата, то выполнение всей составной команды прекращается, иначе выполняется набор список2 и снова повторяется цикл с начала.