Ich arbeite mit Bash 3 und versuche, eine Bedingung zu bilden. In C / C ++, ihre Toten einfach: ((A || B) && C)
. In Bash ist das nicht der Fall (ich denke, die Git-Autoren müssen diesen Code beigesteuert haben, bevor sie sich anderen Bestrebungen widmen).
Das funktioniert nicht. Beachten Sie, dass dies <0 or 1>
kein String-Literal ist. es bedeutet eine 0 oder 1 (kommt im Allgemeinen von grep -i
).
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eqe "0" ]; then ... fi
Es fuehrt zu:
line 322: syntax error near unexpected token `[['
Ich habe dann versucht:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
es fuehrt zu:
line 322: syntax error near unexpected token `[['
Ein Teil des Problems besteht darin, dass die Suchergebnisse die trivialen Beispiele und nicht die komplexeren Beispiele mit zusammengesetzten Bedingungen sind.
Wie führe ich eine einfache ((A || B) && C)
in Bash?
Ich bin bereit, es einfach abzuwickeln und die gleichen Befehle in mehreren Blöcken zu wiederholen:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ "$A" -eq "0" ] && [ "$C" -eq "0" ]; then
...
elif [ "$B" -ne "0" ] && [ "$C" -eq "0" ]; then
...
fi