Testy użyteczności skryptu powłoki, który napisałem, wykazały, że ludzie mieli różne oczekiwania co do odpowiedzi na pytanie, które oczekiwało odpowiedzi „tak”. Zobacz odmiany w poniższym przykładzie kodu.
Z pewnością musi być lepszy sposób niż to, co wymyśliłem? Jaka jest na to twoja czytelna i krótsza forma ?
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
źródło
źródło
Odpowiedzi:
Użycie a
case
jest w pewnym stopniu równoważne, ale nie doskonałe, ponieważ podobne zdaniaYE
są akceptowane.źródło
Standard UNIX udostępnia przykładowy kod do tego celu za pomocą
locale
narzędzia :Wartość „yesexpr” w
POSIX
ustawieniach regionalnych (i w angielskich ustawieniach regionalnych w prawdziwych systemach) to"^[yY]"
. Należy to interpretować jako rozszerzone wyrażenie regularne. Zobacz także noexpr.źródło
locale
o tym wiedzą? Strona podręcznika w moim systemie Mac OS 10.5 chyba ich nie ma.locale -k LC_MESSAGES
(i dla innych LC_cokolwiek), lub zobacz tutaj dla tych zdefiniowanych przez standard. @Daniel do jakiego źródła oprócz strony narzędzia ustawień regionalnych, do której prowadzi link?Pozostanie w bash (lub dowolnej innej powłoce, jeśli wyświetlisz monit niezależnie):
Ten akceptuje odpowiedzi jak
yn
równie Taky
(z pierwotnego miejsca) Ponieważ nie, awlkjzuhfod
jak nie, co może nie być optymalna, ale jest zgodna z typowych podpowiedzi muszli: to jakrm -i
,find -ok
i robią to inni.Pozwala to uniknąć całego problemu internacjonalizacji: w innych językach trzeba byłoby przetłumaczyć oczekiwane odpowiedzi. Nie ma wtedy standardowej metody powłoki; możesz przejść do okna dialogowego , ale wtedy twój skrypt będzie wymagał jego instalacji (jest dostępny w wielu dystrybucjach, ale nie zawsze jest instalowany domyślnie).
źródło
Zwykle używam prostej funkcji:
Funkcja zwraca tylko
0
,Y
czyy
wprowadzono lub , czy wprowadzono1
cokolwiek innego. Może być używany zif...fi
:Lub po prostu tak:
źródło
-s
aby mieć wizualną historię tego, co zostało wpisane.Właśnie zmodyfikowałem @faif ans
Test
źródło