Pracuję z Bash 3 i próbuję utworzyć warunek. W C / C ++, jego martwy prosta ((A || B) && C)
. W Bash okazało się, że tak nie jest (myślę, że autorzy Git musieli napisać ten kod, zanim przystąpili do innych przedsięwzięć).
To nie działa. Zauważ, że <0 or 1>
nie jest to dosłowny ciąg; oznacza 0 lub 1 (zazwyczaj pochodzi od 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
Powoduje to:
line 322: syntax error near unexpected token `[['
Potem spróbowałem:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
skutkuje:
line 322: syntax error near unexpected token `[['
Częścią problemu jest to, że wyniki wyszukiwania są trywialnymi przykładami, a nie bardziej złożonymi przykładami ze złożonymi warunkami warunkowymi.
Jak wykonać proste ((A || B) && C)
w Bash?
Jestem gotowy, aby go rozwinąć i powtórzyć te same polecenia w wielu blokach:
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