Pengujian kegunaan dari skrip shell yang saya tulis menemukan bahwa orang-orang memiliki harapan yang berbeda tentang cara menjawab pertanyaan yang mengharapkan 'ya' sebagai jawabannya. Lihat variasi dalam contoh kode di bawah ini.
Tentunya harus ada cara yang lebih baik dari apa yang saya temukan? Apa bentuk Anda yang dapat dibaca dan lebih pendek dari ini?
read -p 'Answer this question with yes: ' answer
if [ "$answer" = 'Y'
-o "$answer" = 'YES'
-o "$answer" = 'Yes'
-o "$answer" = 'y'
-o "$answer" = 'yes'
-o some-alternate-condition ]; then
echo 'Surely this can be written better?'
fi
bash
shell-script
prompt
Aeyoun
sumber
sumber
Jawaban:
Menggunakan a
case
agak setara tetapi tidak sempurna karena pernyataan sukaYE
diterima.sumber
Standar UNIX menyediakan contoh kode untuk ini menggunakan
locale
utilitas :Nilai untuk 'yesexpr' di
POSIX
lokal (dan pada bahasa Inggris di sistem nyata) adalah"^[yY]"
. Itu harus ditafsirkan sebagai ekspresi reguler yang diperluas. Lihat juga noexpr.sumber
locale
mengetahui tentang? Halaman manual pada kotak Mac OS 10.5 saya sepertinya tidak memilikinya.locale -k LC_MESSAGES
(dan untuk LC_ lainnya apa pun), atau lihat di sini untuk yang didefinisikan oleh standar. @Aniel apa sumber selain halaman utilitas lokal yang saya tautkan?Tetap di bash (atau shell lain jika Anda menampilkan prompt secara mandiri):
Ini menerima respons seperti
yn
ya,y
(dengan spasi awal) sebagai tidak, danwlkjzuhfod
tidak, yang mungkin tidak optimal tetapi konsisten dengan prompt shell yang khas: begitulahrm -i
,find -ok
dan yang lain melakukannya.Ini menghindari seluruh masalah internasionalisasi: dalam bahasa lain, Anda perlu menerjemahkan tanggapan yang diharapkan. Tidak ada metode shell standar; Anda dapat beralih ke dialog , tetapi kemudian skrip Anda akan memerlukannya untuk diinstal (itu tersedia di banyak distribusi tetapi tidak selalu diinstal secara default).
sumber
Saya biasanya menggunakan fungsi sederhana:
Fungsi hanya mengembalikan
0
jikaY
atauy
dimasukkan dan1
jika ada hal lain yang dimasukkan. Ini dapat digunakan denganif...fi
:Atau seperti ini:
sumber
-s
untuk memiliki riwayat visual dari apa yang diketik.Baru saja memodifikasi @faif ans
Uji
sumber