Standar sh
Tidak perlu menggunakan ksh
itu -gaya [[...]]
perintah, Anda dapat menggunakan sh
standar case
bangun di sini:
case $LINUX_CONF in
([Nn][Oo]) echo linux;;
(*) echo not linux;;
esac
Atau menamai setiap kemungkinan kasus satu per satu:
case $LINUX_CONF in
(No | nO | NO | no) echo linux;;
(*) echo not linux;;
esac
pesta
Untuk bash
-cara khusus untuk melakukan pencocokan case-insensitive, Anda dapat melakukan:
shopt -s nocasematch
[[ $LINUX_CONF = no ]] && echo linux
Atau:
[[ ${LINUX_CONF,,} = no ]] && echo linux
(di mana ${VAR,,}
adalah sintaks untuk mengubah string menjadi huruf kecil).
Anda juga dapat memaksa variabel untuk dikonversi menjadi huruf kecil setelah penugasan dengan:
typeset -l LINUX_CONF
Itu juga berasal dari ksh dan juga didukung oleh bash
dan zsh
.
Lebih banyak varian dengan cangkang lain:
zsh
set -o nocasematch
[[ $LINUX_CONF = no ]] && echo linux
(sama seperti di bash
).
setopt extendedglob
[[ $LINUX_CONF = (#i)no ]] && echo linux
(kurang berbahaya daripada membuat semua cocok dengan huruf besar-kecil)
[[ ${(L)LINUX_CONF} = no ]] && echo linux
(ubah menjadi operator huruf kecil)
set -o rematchpcre
[[ $LINUX_CONF =~ '^(?i)no\z' ]]
(sintaksis PCRE)
ksh93
[[ $LINUX_CONF = ~(i)no ]]
atau
[[ $LINUX_CONF = ~(i:no) ]]
Perhatikan bahwa semua pendekatan di atas selain [nN][oO]
untuk melakukan pencocokan peka huruf besar-kecil bergantung pada lokal pengguna. Tidak semua orang di seluruh dunia setuju dengan versi huruf besar dari huruf tertentu, bahkan untuk huruf ASCII.
Dalam praktiknya untuk yang ASCII, setidaknya pada sistem GNU, penyimpangan dari aturan bahasa Inggris tampaknya terbatas pada i
dan I
huruf dan apakah titik ada atau tidak pada versi huruf besar atau kecil.
Artinya adalah [[ ${VAR,,} = oui ]]
itu tidak dijamin cocok dengan OUI
di setiap lokal (bahkan ketika bug di versi bash
saat ini sudah diperbaiki).
Pertahankan perintah Anda yang sudah ada tetapi pada baris sebelum menjalankan ini:
LINUX_CONF=$(echo $LINUX_CONF | awk '{ print tolower($0) }')
Terlepas dari kasus nilai yang disimpan dalam variabel Anda, ini akan memaksa nilai pengganti menjadi huruf kecil. Ini menghasilkan pencocokan perintah yang ada dengan hanya satu baris kode tambahan.