Beim Usability-Test eines von mir geschriebenen Shell-Skripts stellte sich heraus, dass die Leute unterschiedliche Erwartungen an die Beantwortung einer Frage hatten, die mit "Ja" als Antwort erwartet wurde. Siehe Variationen im folgenden Codebeispiel.
Sicherlich muss es einen besseren Weg geben als den, den ich mir ausgedacht habe? Was ist Ihre lesbare und kürzere Form ?
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
quelle
quelle
Antworten:
Die Verwendung von a
case
ist etwas äquivalent, aber nicht perfekt, da Aussagen wieYE
akzeptiert werden.quelle
Der UNIX-Standard bietet hierfür Beispielcode mit dem
locale
Dienstprogramm :Der Wert für 'yesexpr' in der Ländereinstellung
POSIX
(und in englischen Ländereinstellungen auf realen Systemen) ist"^[yY]"
. Es ist als erweiterter regulärer Ausdruck zu interpretieren. Siehe auch noexpr.quelle
locale
über die ich Bescheid weiß? Die Manpage auf meiner Mac OS 10.5-Box scheint sie nicht zu haben.locale -k LC_MESSAGES
(und für die anderen LC_was auch immer), oder sehen Sie hier für diejenigen, die durch den Standard definiert sind. @Daniel, aus welcher anderen Quelle als der Seite mit dem Gebietsschemadienstprogramm, die ich verlinkt habe?Bleiben Sie in der Bash (oder einer anderen Shell, wenn Sie die Eingabeaufforderung unabhängig anzeigen):
Dies akzeptiert Antworten wie
yn
als ja,y
(mit einem anfänglichen Raum) als nein, undwlkjzuhfod
wie keine, das ein optimalen möglicherweise nicht sein , ist aber im Einklang mit dem typisch Shell Prompts: das ist , wierm -i
,find -ok
und andere tun es.Dies vermeidet das ganze Problem der Internationalisierung: In anderen Sprachen müssten Sie die erwarteten Antworten übersetzen. Dann gibt es keine Standard-Shell-Methode. Sie können zum Dialogfeld wechseln. In diesem Fall muss das Skript installiert werden (es ist in vielen Distributionen verfügbar, wird jedoch nicht immer standardmäßig installiert).
quelle
Normalerweise benutze ich eine einfache Funktion:
Die Funktion kehrt nur zurück,
0
wennY
odery
eingegeben wird und1
wenn etwas anderes eingegeben wird. Es kann verwendet werden mitif...fi
:Oder einfach so:
quelle
-s
, um einen visuellen Verlauf dessen zu erhalten, was getippt wurde.Nur @faif ans geändert
Prüfung
quelle