Ich suche ein Konstrukt in bash
, um zu entscheiden, ob eine Variable $WORD
eines von definierten Wörtern ist. Ich brauche so etwas:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
Hat Bash ein solches Konstrukt? Wenn nicht, welches wäre das nächste?
bash
shell-script
Martin Vegter
quelle
quelle
shopt -s nocasematch
kann hilfreich sein, wenn bei der Suche die Groß- und Kleinschreibung nicht berücksichtigt werden soll.[[
und verwenden müssen]]
-[
und]
nicht genug sind.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
quelle
Wie wäre es mit:
Dann:
quelle
quelle
$WORD
leer, wird es passen , wennWORD=ca
oderWORD=og
oder ähnlich , und ich nehme an, Sie gemeintecho ${set[@]}
.Sie können hierfür eine Bash-Funktion definieren:
Dann benutze einfach so:
quelle
Ich suchte nach einer "einzeiligen" Lösung, um mein Skriptargument zu validieren, und benutzte Joseph Rs obige Antwort , um Folgendes zu finden:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
quelle
Das hat bei mir funktioniert:
quelle
Möglicherweise möchten Sie die Wortliste in eine Datei einfügen, falls Sie die Liste häufig ändern, oder möchten, dass sie von mehreren Skripten gemeinsam genutzt wird. Und Sie müssen die Wörter möglicherweise in eine Datei einfügen, wenn die Liste zu lang wird, um sie in einem Skript zu verwalten. Dann kannst du sagen
quelle
Wenn es sich bei Wörtern um eine Liste handelt, bei der die Werte durch einen Zeilenumbruch getrennt sind, können Sie Folgendes tun:
quelle
Sie können fgrep verwenden, um alle zulässigen Wörter anzugeben:
Das
-w
Flag stimmt nur mit vollständigen Wörtern überein, das-q
Flag bewirkt, dass es im Hintergrund ausgeführt wird (alles, was wir benötigen, ist der Rückgabewert für die zu verwendende if-Anweisung), und jedes-e
Muster gibt ein zuzulassendes Muster an.fgrep
ist die Version von grep, die den normalen String-Abgleich anstelle des Regex-Abgleichs vornimmt. Wenn Sie habengrep
, sollten Sie habenfgrep
, aber wenn nicht, ist es identisch mit der Verwendunggrep
mit der-F
Flagge (so würden Sie nurfgrep -wq
oben mit ersetzengrep -Fwq
).quelle