Sto lavorando con Bash 3 e sto cercando di creare un condizionale. In C / C ++, i suoi morti semplice: ((A || B) && C)
. In Bash, il suo risultato non è così (penso che gli autori di Git debbano aver contribuito a questo codice prima di passare ad altre attività).
Questo non funziona. Nota che <0 or 1>
non è una stringa letterale; significa uno 0 o 1 (generalmente viene 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
Si traduce in:
line 322: syntax error near unexpected token `[['
Ho quindi provato:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
risulta in:
line 322: syntax error near unexpected token `[['
Parte del problema è che i risultati della ricerca sono gli esempi banali e non gli esempi più complessi con condizionali composti.
Come eseguo un semplice ((A || B) && C)
in Bash?
Sono pronto a srotolarlo e ripetere gli stessi comandi in più blocchi:
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