El []
operador en bash es azúcar sintáctico para una llamada a test
, que está documentado en man test
. "o" se expresa mediante un infijo -o
, pero necesita un "y":
while [ $guess != 5 -a $guess != 10 ]; do
Hay 2 formas correctas y portátiles de lograr lo que quieres.
Buen viejo shell
sintaxis:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
Y bash
sintaxis (como usted especifique):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
La forma portátil y robusta es usar un case
declaración en su lugar. Si no está acostumbrado, es posible que necesite algunas miradas para entender la sintaxis.
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
Usé while true
pero de hecho podrías usar el case
declaración allí directamente. Sin embargo, se vuelve difícil de leer y mantener.
while case $guess in 5 | 10) false;; *) true;; esac; do ...