Der []
Operator in Bash ist syntaktischer Zucker für einen Aufruf von test
, die in man test
dokumentiert ist . „oder“ wird durch ein angehängtes -o
ausgedrückt , aber Sie brauchen ein "und":
while [ $guess != 5 -a $guess != 10 ]; do
Es gibt 2 richtige und tragbare Möglichkeiten, um das zu erreichen, was Sie wollen.
Gute alte shell
Syntax:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
Und bash
Syntax (wie Sie angeben):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Der tragbare und robuste Weg ist die Verwendung eines case
Aussage statt. Wenn Sie nicht daran gewöhnt sind, brauchen Sie vielleicht ein paar Blicke, um sich mit der Syntax vertraut zu machen.
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
Ich habe while true
verwendet aber Sie könnten tatsächlich den case
verwenden Aussage dort direkt. Es wird jedoch schwierig zu lesen und zu pflegen.
while case $guess in 5 | 10) false;; *) true;; esac; do ...