Früher, als wir nur sh
hatten, wurden Booleans durch eine Konvention des test
-Programms behandelt, bei dem test
einen falschen Exit-Status zurückgibt, wenn es ohne Argumente ausgeführt wird.
Dies ermöglicht es, eine Variable, die nicht festgelegt ist, als falsch zu betrachten und eine Variable, die auf einen Wert gesetzt ist, als wahr. Heutzutage ist test
ein internes Befehl in Bash und ist allgemein bekannt durch seinen einzeiligen Alias [
(oder als ausführbare Datei, die in Shells verwendet wird, die es nicht haben, wie dolmen bemerkt):
FLAG="up or "
if [ "$FLAG" ] ; then
echo 'Ist wahr'
else
echo 'Ist falsch'
fi
# FLAG nicht festgelegt
# funktioniert auch
FLAG=
if [ "$FLAG" ] ; then
echo 'Bleibt wahr'
else
echo 'Wurde falsch'
fi
Aufgrund von Zitierkonventionen bevorzugen Skriptautoren den Einsatz des Kompound-Befehls [[
, der test
nachahmt, aber eine schönere Syntax hat: Variablen mit Leerzeichen müssen nicht zitiert werden; man kann &&
und ||
als logische Operatoren mit eigenartiger Reihenfolge verwenden, und es gibt keine POSIX-Beschränkungen hinsichtlich der Anzahl der Bedingungen.
Zum Beispiel, um festzustellen, ob FLAG festgelegt ist und COUNT eine Zahl größer als 1 ist:
FLAG="u p"
COUNT=3
if [[ $FLAG && $COUNT -gt '1' ]] ; then
echo 'Flag ist aktiv, Count größer als 1'
else
echo 'Nein'
fi
Dies kann verwirrend werden, wenn Leerzeichen, null-längige Zeichenfolgen und leere Variablen benötigt werden und auch, wenn Ihr Skript mit mehreren Shells zusammenarbeiten muss.