Intereting Posts
Построить Gimp из библиотек пользовательского пути Невозможно подключиться к устройствам Bluetooth (т.е. громкоговорителям) на debian jessie Понимание использования Inode NTFS-3g Когда я пытаюсь добавить Android SDK в свой PATH, он дает контекстную ошибку Команда использования памяти с синтаксисом, аналогичная команде времени Как сохранить смешанные форматы перевода строки в gawk? Как получить планшет Digitizer Finepoint для работы в Fedora Core 16? Отключить учетные записи и распечатать информацию о попытке входа в систему lxc: запуск виртуального бокса внутри контейнера Данные из скрипта python на веб-сайт Как установить BBB без (прямого) подключения к Интернету? Можно ли разделить файл и добавить части с одинаковым расширением в один лайнер? Как правильно использовать переменные в этом маленьком скрипте? Использование памяти параллельного ограничения GNU Nagios не удалось перезапустить с новым сервисом directove в localhost.cfg

Как использовать пользовательский ввод как условие цикла while

Я могу сделать это в bash:

while read -n1 -r -p "choose [y]es|[n]o" do if [[ $REPLY == q ]]; then break; else #whatever fi done 

который работает, но кажется немного избыточным, могу ли я сделать что-то подобное вместо этого?

 while [[ `read -n1 -r -p "choose [y]es|[n]o"` != q ]] do #whatever done 

Вы не можете использовать код возврата для read (он равен нулю, если он становится действительным, непустым вводом), и вы не можете использовать его вывод ( read ничего не печатает). Но вы можете поместить несколько команд в состояние цикла while. Условие цикла while может быть как сложной командой, так вам нравится.

 while read -n1 -r -p "choose [y]es|[n]o" && [[ $REPLY != q ]]; do case $REPLY in y) echo "Yes";; n) echo "No";; *) echo "What?";; esac done 

(Это выходит из цикла, если вход равен q или если обнаружено условие конца файла.)