Mungkin ini kebodohan saya. Saya ingin menerima jawaban Ya / Tidak, Benar / Salah dalam skrip Bash saya:
test.sh
#!/bin/bash
ARGUMENT=$1
echo User passed in $ARGUMENT
OPTARG=${ARGUMENT:0:1}
if [[ "$OPTARG" -eq 0 ]] || [[ "${OPTARG^^}" == "N" ]]; then
echo Decline
elif [[ "$OPTARG" -eq 1 ]] || [[ "${OPTARG^^}" == "Y" ]]; then
echo Accept
else
echo Invalid argument
fi
Berikut adalah beberapa hasil sampel:
./test.sh 0
User passed in 0
Decline
./test.sh 1
User passed in 1
Accept
./test.sh 2
User passed in 2
Invalid argument
./test.sh Tidak
User passed in No
Decline
Sekarang bungkam itu. Mengapa [[ "${OPTARG^^}" == "N" ]]
mengembalikan true untuk string apa pun !?
./test.sh Ya
User passed in Yes
Decline
./test.sh ThisShouldNotMatch
User passed in ThisShouldNotMatch
Decline
Jawaban:
Ini:
Akan cocok dengan string apa pun, kecuali hanya digit. Menggunakan:
Sebagai gantinya.
sumber
Meskipun masalah dalam kode Anda telah dijelaskan dengan baik oleh goldilocks , saya tidak dapat menahan diri untuk mengatakan bahwa kode Anda terlalu panjang. Anda bisa menyederhanakannya banyak.
Berikut ini setara dengan kode yang Anda inginkan:
Anda mungkin juga ingin merujuk pada Conditional Constructs dalam manual .
sumber
Anda juga bisa menggunakannya
case
sumber