Le []
l'opérateur dans bash est du sucre syntaxique pour un appel à test
, qui est documenté dans man test
. "ou" est exprimé par un infixe -o
, mais vous avez besoin d'un "et":
while [ $guess != 5 -a $guess != 10 ]; do
Il existe 2 façons correctes et portables d'obtenir ce que vous voulez.
Bon vieux shell
syntaxe :
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
Et bash
syntaxe (comme vous le spécifiez) :
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Le moyen portable et robuste consiste à utiliser un case
déclaration à la place. Si vous n'y êtes pas habitué, cela peut prendre quelques regards juste pour comprendre la syntaxe.
while true; do
case $guess in 5 | 10) break ;; esac
echo Your answer is $guess. This is incorrect. Please try again.
echo -n "What is your guess? "
read guess # not $guess
done
J'ai utilisé while true
mais vous pourriez en fait utiliser le case
déclaration là directement. Il devient poilu à lire et à maintenir, cependant.
while case $guess in 5 | 10) false;; *) true;; esac; do ...