Я работаю с Bash 3, и я пытаюсь сформировать условия. В C / C ++, его мертвым просто: ((A || B) && C)
. В Bash все оказалось не так (я думаю, что авторы Git, должно быть, внесли этот код, прежде чем перейти к другим попыткам).
Это не работает. Обратите внимание, что <0 or 1>
это не строковый литерал; это означает 0 или 1 (как правило, происходит от 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
Это приводит к:
line 322: syntax error near unexpected token `[['
Я тогда попробовал:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
это приводит к:
line 322: syntax error near unexpected token `[['
Частично проблема заключается в том, что результаты поиска представляют собой тривиальные примеры, а не более сложные примеры с составными условиями.
Как мне выполнить простую ((A || B) && C)
в Bash?
Я готов просто развернуть его и повторить те же команды в нескольких блоках:
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