Linux
bash - 不區分大小寫的變數匹配
當變數等於“no”時,此語法列印“linux”:
[[ $LINUX_CONF = no ]] && echo "linux"
我將如何使用正則表達式(或類似表達式)以使比較不區分大小寫?
標準sh
無需使用該
ksh
-style[[...]]
命令,您可以在sh
case
此處使用標準構造:case $LINUX_CONF in ([Nn][Oo]) echo linux;; (*) echo not linux;; esac
或者單獨命名每個可能的情況:
case $LINUX_CONF in (No | nO | NO | no) echo linux;; (*) echo not linux;; esac
重擊
對於
bash
進行不區分大小寫匹配的特定方式,您可以執行以下操作:shopt -s nocasematch [[ $LINUX_CONF = no ]] && echo linux
或者:
[[ ${LINUX_CONF,,} = no ]] && echo linux
(
${VAR,,}
將字元串轉換為小寫的語法在哪裡)。您還可以在賦值時強制將變數轉換為小寫:
typeset -l LINUX_CONF
這也來自 ksh 並且也受
bash
and支持zsh
。其他外殼的更多變體:
zsh
set -o nocasematch [[ $LINUX_CONF = no ]] && echo linux
(與 中相同
bash
)。set -o extendedglob [[ $LINUX_CONF = (#i)no ]] && echo linux
(比使所有匹配不區分大小寫危險)
[[ ${(L)LINUX_CONF} = no ]] && echo linux [[ $LINUX_CONF:l = no ]] && echo linux
(轉換為小寫運算符)
set -o rematchpcre [[ $LINUX_CONF =~ '^(?i)no\z' ]]
(PCRE 語法)
ksh93
[[ $LINUX_CONF = ~(i)no ]]
或者
[[ $LINUX_CONF = ~(i:no) ]]
請注意,除了
[nN][oO]
進行不區分大小寫的匹配之外,上述所有方法都取決於使用者的語言環境。並非世界各地的所有人都同意給定字母的大寫版本,即使是 ASCII 字母也是如此。在 ASCII 的實踐中,至少在 GNU 系統上,與英文規則的偏差似乎僅限於
i
和I
字母,以及大寫或小寫版本上是否存在點。這意味著
[[ ${VAR,,} = oui ]]
不能保證OUI
在每個語言環境中都匹配(即使目前版本中的錯誤bash
已修復)。