Я працюю з 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