Поймать неожиданный ввод одиночного символа в bash

У меня есть сценарий bash, который в какой-то момент запрашивает у пользователя подтверждение. Я делаю это, читая один символ, который затем преобразуется в нижний регистр и проверяется, является ли это «y». Если нет, сценарий завершается.

Теперь, если я просто нажимаю Enter на вводном чтении, я получаю error: unary operator expected . Как я могу предотвратить эту проблему или поймать ошибку?

Фрагмент кода:

 echo -ne "Confirm [y/n]: " read -n1 uc if [ ${uc,,} != "y" ] then exit 0 fi 

One Solution collect form web for “Поймать неожиданный ввод одиночного символа в bash”

Это заявление должно работать должным образом:

 if [ "${uc,,}" != "y" ] 

Объяснение: Когда uc пуст, ваш тест расширяется оболочкой следующим образом:

 if [ != "y" ] 

в то время как с кавычками это

 if [ "" != "y" ] 

Правило большого пальца: всегда используйте кавычки вокруг переменных оболочки, которые содержат строки при их расширении; они могут содержать пробелы или быть пустыми, что при некотировании часто путает команду, которую они передают (слишком много или отсутствующих параметров).

  • Как сравнить версию программы в сценарии оболочки?
  • awk системный вызов с инвертированным эффектом
  • bash: -eq vs. == и `bc` тип вывода
  • Как сравнить строки в ksh
  • Как узнать, существует ли каталог?
  • Как использовать отрицание команды в цикле while с grep в сценарии оболочки?
  • bourne shell, если
  • Модернизирован, чтобы проверить ветвь по ошибке в debian ... как я могу вернуться к стабильной?
  • Множественный оператор, который включает специальные символы, используя при возникновении ошибок
  • Linux и Unix - лучшая ОС в мире.