Wie teste ich komplexe Ausdrücke mit Bash?

Wie teste ich komplexe Ausdrücke mit Bash?

Ich kann nur einfache Ausdrücke wie1=1 and 0=1

test 1 = 1 -a 0 = 1 

Aber wie erstellt man komplexe Ausdrücke wie 1=1 and (0=1 or 1=1)?

Antwort1

Verwenden Sie entweder mehrere Testanrufe:

test 1 = 1 && test 0 = 1 -o 1 = 1

oder [[:

[[ 1 = 1 && (0 = 1 || 1 = 1) ]]

Antwort2

testSie können „oder [...“ verwenden, ]solange Sie vorsichtig sind und daran denken, dass Klammern maskiert und Begriffe durch Leerzeichen getrennt werden müssen:

if [ \( a = a \) -a \( a = b -o b = b \) ]
then echo Yes
else echo No
fi

Das klingt für mich nach „Ja“. Normalerweise ist es jedoch einfacher, stattdessen den Bash- und Korn-Shell- Operator [[... zu verwenden ]]. Sie müssen nicht so oft Escape-Befehle ausführen.

Antwort3

Die Frage wurde bereits beantwortet, aber hier sind ein paar Stiltipps, die Sie berücksichtigen (und vielleicht auch ablehnen :-) ) könnten:

Wenn Sie derjenige sind, der es schreibt, und es verwirrend finden, dann vielleicht:

  • Verwenden Sie zusätzliche (), auch wenn sie nicht benötigt werden. Das könnte für mehr Klarheit sorgen.
  • Verwenden Sie möglicherweise auch verschachtelte Schleifen anstelle vieler und-Anweisungen.

Antwort4

Florian hat oben größtenteils Recht, aber bedenken Sie, dass Bash auch eine arithmetische Erweiterung hat, die beim Vergleichen von Variablen etwas angenehmer ist.

SehenHierFür mehr Information.

verwandte Informationen