Je travaille avec Bash 3 et j'essaye de former un conditionnel. En C / C ++, sa mort simple: ((A || B) && C)
. Dans Bash, cela ne s'est pas avéré (je pense que les auteurs Git ont dû contribuer à ce code avant de passer à d'autres projets).
Cela ne fonctionne pas. Notez que ce <0 or 1>
n'est pas un littéral de chaîne; cela signifie un 0 ou 1 (vient généralement de 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
Il en résulte:
line 322: syntax error near unexpected token `[['
J'ai ensuite essayé:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
il en résulte:
line 322: syntax error near unexpected token `[['
Une partie du problème est que les résultats de recherche sont les exemples triviaux, et non les exemples plus complexes avec des conditions composées.
Comment effectuer un simple ((A || B) && C)
dans Bash?
Je suis prêt à le dérouler et à répéter les mêmes commandes dans plusieurs blocs:
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