Technique classique d'échappement des caractères de remplacement):
if [ \( $g -eq 1 -a "$c" = "123" \) -o \( $g -eq 2 -a "$c" = "456" \) ]
then echo abc
else echo efg
fi
J'ai essayé différents trucs avec '[[ ... ]]
"sans succès - même échapper à l'parenthèses n'a pas l'air de fonctionner.
N'est-ce pas une question classique?
J'aurais pensé. Cependant, il existe une alternative, à savoir:
if [ $g -eq 1 -a "$c" = "123" ] || [ $g -eq 2 -a "$c" = "456" ]
then echo abc
else echo efg
fi
En effet, si vous lisez le "portable shell" lignes directrices pour l' autoconf
outil ou les paquets relatifs à cette notation en utilisant"||
"et"&&
' - est ce qu'ils recommandent. Je suppose que vous pourriez même aller aussi loin que:
if [ $g -eq 1 ] && [ "$c" = "123" ]
then echo abc
elif [ $g -eq 2 ] && [ "$c" = "456" ]
then echo abc
else echo efg
fi
D'où les actions sont aussi trivial comme en écho, ce n'est pas mauvais. Lorsque l'action du bloc est répété plusieurs lignes, la répétition est trop douloureux et l'une des versions précédentes est préférable.