Bash verwirrt wirklich mit Dingen wie [
, [[
, ((
, $((
, usw.
Alles drängt sich in den Codebereichen der anderen. Ich denke, das ist größtenteils historisch bedingt, wo Bash gelegentlich vorgeben musste, sh
zu sein.
Die meiste Zeit kann ich einfach eine Methode auswählen und dabei bleiben. In diesem Fall neige ich dazu, zu deklarieren (am besten in einer gemeinsamen Bibliotheksdatei, die ich mit .
in meinem tatsächlichen Skript(en) einbeziehen kann).
TRUE=1; FALSE=0
Dann kann ich den ((
... ))
-Arithmetikoperator verwenden, um auf diese Weise zu testen.
testvar=$FALSE
if [[ -d ${does_directory_exist} ]]
then
testvar=$TRUE;
fi
if (( testvar == TRUE )); then
# Dinge machen, denn das Verzeichnis existiert
fi
-
Sie müssen diszipliniert sein. Ihr testvar
muss zu jeder Zeit entweder auf $TRUE
oder $FALSE
gesetzt sein.
-
In ((
... ))
-Vergleichsoperatoren benötigen Sie nicht das vorangestellte $
, was es lesbarer macht.
-
Ich kann ((
... ))
verwenden, weil $TRUE=1
und $FALSE=0
, d.h. numerische Werte sind.
-
Der Nachteil ist, dass man gelegentlich ein $
verwenden muss:
testvar=$TRUE
was nicht so schön ist.
Es ist keine perfekte Lösung, aber sie deckt jeden Fall ab, den ich bei einem solchen Test benötige.