[] 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 ...