Saya bekerja dengan Bash 3, dan saya mencoba untuk membentuk bersyarat. Dalam C / C ++, sederhana mati nya: ((A || B) && C)
. Di Bash, ternyata tidak begitu (saya pikir para penulis Git harus menyumbang kode ini sebelum mereka pindah ke upaya lain).
Ini tidak bekerja. Perhatikan bahwa <0 or 1>
ini bukan string literal; itu berarti 0 atau 1 (umumnya berasal dari 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
Ini menghasilkan:
line 322: syntax error near unexpected token `[['
Saya kemudian mencoba:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
itu menghasilkan:
line 322: syntax error near unexpected token `[['
Bagian dari masalah adalah hasil pencarian adalah contoh-contoh sepele, dan bukan contoh yang lebih kompleks dengan kondisional majemuk.
Bagaimana cara melakukan yang sederhana ((A || B) && C)
di Bash?
Saya siap untuk membuka gulungannya dan mengulangi perintah yang sama di beberapa blok:
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