Standardní sh
Není třeba používat ksh
-style [[...]]
můžete použít standardní sh
case
vytvořit zde:
case $LINUX_CONF in
([Nn][Oo]) echo linux;;
(*) echo not linux;;
esac
Nebo pojmenujte každý možný případ jednotlivě:
case $LINUX_CONF in
(No | nO | NO | no) echo linux;;
(*) echo not linux;;
esac
bash
Pro bash
-specifický způsob, jak provést párování bez rozlišení velkých a malých písmen, můžete provést:
shopt -s nocasematch
[[ $LINUX_CONF = no ]] && echo linux
Nebo:
[[ ${LINUX_CONF,,} = no ]] && echo linux
(kde ${VAR,,}
je syntaxe pro převod řetězce na malá písmena).
Můžete také vynutit převod proměnné na malá písmena při přiřazení pomocí:
typeset -l LINUX_CONF
To také pochází z ksh a je také podporováno bash
a zsh
.
Více variant s jinými mušlemi:
zsh
set -o nocasematch
[[ $LINUX_CONF = no ]] && echo linux
(stejně jako v bash
).
setopt extendedglob
[[ $LINUX_CONF = (#i)no ]] && echo linux
(méně nebezpečné než vytváření všech nerozlišuje velká a malá písmena)
[[ ${(L)LINUX_CONF} = no ]] && echo linux
(převést na malá písmena)
set -o rematchpcre
[[ $LINUX_CONF =~ '^(?i)no\z' ]]
(syntaxe PCRE)
ksh93
[[ $LINUX_CONF = ~(i)no ]]
nebo
[[ $LINUX_CONF = ~(i:no) ]]
Všimněte si, že všechny výše uvedené přístupy kromě [nN][oO]
provedení shody bez rozlišení velikosti písmen závisí na národním prostředí uživatele. Ne všichni lidé na celém světě souhlasí s tím, jaká je velká verze daného písmene, a to ani u písmen ASCII.
V praxi pro ty ASCII, alespoň na systémech GNU, se odchylky od anglických pravidel zdají být omezeny na i
a I
písmena a zda je na verzi s velkými nebo malými písmeny tečka nebo ne.
To znamená, že [[ ${VAR,,} = oui ]]
není zaručena shoda na OUI
v každém národním prostředí (i když chyba v aktuálních verzích bash
je opraveno).
Před spuštěním tohoto příkazu ponechte svůj stávající příkaz, ale na řádku:
LINUX_CONF=$(echo $LINUX_CONF | awk '{ print tolower($0) }')
Bez ohledu na velikost písmen hodnoty uložené ve vaší proměnné to vynutí hodnotu nahrazení malými písmeny. Výsledkem je shoda existujícího příkazu s pouze jedním dalším řádkem kódu.