Innerhalb eines bash [[…]]
(und innerhalb der älteren […]
in den meisten Shells), was zählt, ist, wenn der getestete Wert einige Zeichen hat oder nicht:
$ [[ somevalue ]] && echo "yes" || echo "no"
Wenn der Wert leer getestet, wenn der Test nicht bestanden :
$ [[ "" ]] && echo "yes" || echo "no"
no
Das gilt auch für Variablen ist:
$ somevalue="a false string"
$ [[ $somevalue ]] && echo "yes" || echo "no"
yes
$ somevalue=""
$ [[ $somevalue ]] && echo "yes" || echo "no"
no
Also, [[…]]
ist beschränkt auf Testzeichenfolgen nicht "Exit-Codes".
Ihre Funktionen definieren "Exit-Codes", keine Zeichenfolgen.
Sie können definieren
die Werte von mytrue
und myfalse
Variablen sein, die diese Werte darstellen:
mytrue=A_True_Value
myfalse=""
und nutzen sie:
$ show="dont-show"
$ [[ ${SHOW} == "show" || $mytrue ]] && echo "ok" || echo "wrong"
ok
$ [[ ${SHOW} == "show" || $myfalse ]] && echo "ok" || echo "wrong"
wrong
Oder eigentlich Ausfahrt Test Codes außerhalb eines [[…]]
Idioms:
$ mytrue(){ return 0; }
$ if mytrue; then echo "ok"; else echo "wrong"; fi
ok
$ mytrue && echo "ok" || echo "wrong"
ok
One (komplexere) Alternative ist, die Funktionen Wert emittieren zu machen und die Ausführung des Codes in den Funktionen des [[…]]
Idiom nennen:
$ mytrue(){ echo "A_True_Value"; }
$ myfalse(){ echo ""; }
$ show="dont-show"
$ [[ ${SHOW} == "show" || $(mytrue) ]] && echo "ok" || echo "wrong"
ok
KISS
aber (wahrscheinlich) die einfachsten Lösungen ist die beste Lösung:
myfalse=""
mytrue="true"
test-conditional() {
show="dont-show"
[[ ${show} == "show" || $mytrue ]] && echo "ok" || echo "wrong"
[[ ${show} == "show" && $mytrue ]] && echo "err" || echo "ok"
[[ ${show} == "show" || $myfalse ]] && echo "err" || echo "ok"
[[ ${show} == "show" && $myfalse ]] && echo "err" || echo "ok"
show="show"
[[ ${show} == "show" || $mytrue ]] && echo "ok" || echo "err"
[[ ${show} == "show" && $mytrue ]] && echo "ok" || echo "err"
[[ ${show} == "show" || $myfalse ]] && echo "ok" || echo "err"
[[ ${show} == "show" && $myfalse ]] && echo "err" || echo "ok"
}
test-conditional
Sie nicht, nur die Klammern entfernen. oder schließe nur den '==' Vergleich innen ein, d.h '[[$ {SHOW} ==" show "]] || mytrue' – 123
Auch 0 ist in bash wahr. – 123