Юзабилити-тестирование сценария оболочки, которое я написал, показало, что у людей разные ожидания относительно того, как ответить на вопрос, который ожидал «да» в качестве ответа. См. Варианты в приведенном ниже примере кода.
Конечно, должен быть лучший способ, что я придумал? Какова ваша читаемая и более короткая форма ?
read -p 'Answer this question with yes: ' answer
if [ "$answer" = 'Y'
-o "$answer" = 'YES'
-o "$answer" = 'Yes'
-o "$answer" = 'y'
-o "$answer" = 'yes'
-o some-alternate-condition ]; then
echo 'Surely this can be written better?'
fi
bash
shell-script
prompt
Aeyoun
источник
источник
Ответы:
Использование a
case
в некоторой степени эквивалентно, но не идеально, так как утверждения типаYE
принимаются.источник
Стандарт UNIX предоставляет пример кода для этого с помощью
locale
утилиты :Значение для 'yesexpr' в
POSIX
локали (и в английских локалях в реальных системах) равно"^[yY]"
. Это должно быть интерпретировано как расширенное регулярное выражение. Смотрите также noexpr.источник
locale
о которых известно? Страница man на моем Mac OS 10.5, похоже, не содержит их.locale -k LC_MESSAGES
(и для других LC_ что угодно), или посмотреть здесь для тех, которые определены стандартом. @Daniel, какой источник, кроме служебной страницы локали, на которую я сделал ссылку?Оставаться в bash (или любой другой оболочке, если вы отображаете приглашение независимо):
Это принимает ответы , как ,
yn
как да,y
(с начальным пространством) , как нет, иwlkjzuhfod
как ни один , который не может быть оптимальным , но согласуется с типичными подсказками оболочки: вот какrm -i
,find -ok
и это делают другие.Это полностью исключает проблему интернационализации: на других языках вам нужно будет перевести ожидаемые ответы. Там нет стандартного метода оболочки тогда; Вы можете перейти к диалогу , но тогда ваш скрипт потребует его установки (он доступен во многих дистрибутивах, но не всегда устанавливается по умолчанию).
источник
Я обычно использую простую функцию:
Функция просто возвращает,
0
еслиY
илиy
введено, и1
если что-либо еще введено. Может использоваться сif...fi
:Или просто так:
источник
-s
чтобы иметь визуальную историю того, что было напечатано.Только что обновил @faif ans
Тест
источник