[]
operator di bash adalah gula sintaksis untuk panggilan ke test
, yang didokumentasikan dalam man test
. "atau" dinyatakan dengan infiks -o
, tetapi Anda memerlukan "dan":
while [ $guess != 5 -a $guess != 10 ]; do
Ada 2 cara yang benar dan portabel untuk mencapai apa yang Anda inginkan.
shell
lama yang bagus sintaks:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
Dan bash
sintaks (seperti yang Anda tentukan):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Cara portabel dan kuat adalah dengan menggunakan case
pernyataan sebagai gantinya. Jika Anda tidak terbiasa, mungkin perlu beberapa kali melihat hanya untuk memahami sintaksisnya.
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
Saya menggunakan while true
tetapi sebenarnya Anda bisa menggunakan case
pernyataan di sana secara langsung. Namun, sulit untuk membaca dan memelihara.
while case $guess in 5 | 10) false;; *) true;; esac; do ...