Intereting Posts
Как определить, какой процесс создает файл? Как заставить клавиши F1-F4 нормально вести себя в tmux нет ввода в меню для / dev / ttyusb0, не загружаемого Как я могу заставить все мои процессы начать с приятности 5 Различные разделы загрузки для двойной загрузки Почему раздел будет использоваться системой, если он не установлен? Найти файлы дубликатов после использования PhotoRec Теоретик: Как убить процесс forking forking? Линейная командная строка Linux, которая выйдет из строя, если будет произведен какой-либо стандарт Где журнал, когда кто-то ssh моя машина? Какая-то обратная кошка tmpfs с правами доступа для всех пользователей в любое время Как рассчитать среднее количество столбцов по строкам, а также максимальное количество столбцов в файле в unix? Правильный способ добавления пользователей в репозиторий Subversion Проверка достоверности MD5 сумм

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

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

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

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

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

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

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

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

 if [ != "y" ] 

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

 if [ "" != "y" ] 

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