[]
bash の演算子は、test
への呼び出しのシンタックス シュガーです。 man test
に記載されています . 「または」は中置 -o
で表されます 、ただし「and」が必要です:
while [ $guess != 5 -a $guess != 10 ]; do
あなたが望むものを達成するための2つの正しい移植可能な方法があります。
古き良き shell
構文:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
そして bash
構文 (指定):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
移植可能で堅牢な方法は、 case
を使用することです 代わりにステートメント。慣れていない場合は、構文を理解するのに少し時間がかかるかもしれません。
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
while true
を使用しました しかし、実際には case
を使用できます そこに直接ステートメント。ただし、読んで維持するのは面倒です。
while case $guess in 5 | 10) false;; *) true;; esac; do ...