[]
operátor v bash je syntaktický cukr pro volání test
, což je zdokumentováno v man test
. "nebo" je vyjádřeno infixem -o
, ale potřebujete "a":
while [ $guess != 5 -a $guess != 10 ]; do
Existují 2 správné a přenosné způsoby, jak dosáhnout toho, co chcete.
Stará dobrá shell
syntaxe:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
A bash
syntaxe (jak zadáte):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Přenosným a robustním způsobem je použití case
místo toho prohlášení. Pokud na to nejste zvyklí, může to trvat několik pohledů, abyste si omotali hlavu kolem 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
Použil jsem while true
ale ve skutečnosti byste mohli použít case
prohlášení tam přímo. Čtení a udržování je však chlupaté.
while case $guess in 5 | 10) false;; *) true;; esac; do ...