Il []
operatore in bash è lo zucchero sintattico per una chiamata a test
, che è documentato in man test
. "o" è espresso da un infisso -o
, ma hai bisogno di un "e":
while [ $guess != 5 -a $guess != 10 ]; do
Esistono 2 modi corretti e portatili per ottenere ciò che desideri.
Il buon vecchio shell
sintassi:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
E bash
sintassi (come specificato):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Il modo portatile e robusto è usare un case
dichiarazione invece. Se non ci sei abituato, potrebbero essere necessari alcuni sguardi solo per capire la sintassi.
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
Ho usato while true
ma in effetti potresti usare case
dichiarazione lì direttamente. Tuttavia, diventa peloso da leggere e mantenere.
while case $guess in 5 | 10) false;; *) true;; esac; do ...