Standardsch
Diesen ksh
brauchen Sie nicht zu verwenden -Stil [[...]]
Befehl können Sie den Standard sh
verwenden case
hier konstruieren:
case $LINUX_CONF in
([Nn][Oo]) echo linux;;
(*) echo not linux;;
esac
Oder jeden möglichen Fall einzeln benennen:
case $LINUX_CONF in
(No | nO | NO | no) echo linux;;
(*) echo not linux;;
esac
Bash
Für bash
-spezifische Möglichkeit, die Groß-/Kleinschreibung zu beachten, können Sie Folgendes tun:
shopt -s nocasematch
[[ $LINUX_CONF = no ]] && echo linux
Oder:
[[ ${LINUX_CONF,,} = no ]] && echo linux
(wobei ${VAR,,}
ist die Syntax, um einen String in Kleinbuchstaben umzuwandeln).
Sie können auch erzwingen, dass eine Variable bei der Zuweisung in Kleinbuchstaben umgewandelt wird mit:
typeset -l LINUX_CONF
Das kommt auch von ksh und wird auch von bash
unterstützt und zsh
.
Weitere Varianten mit anderen Shells:
zsh
set -o nocasematch
[[ $LINUX_CONF = no ]] && echo linux
(wie in bash
).
setopt extendedglob
[[ $LINUX_CONF = (#i)no ]] && echo linux
(weniger gefährlich als alle zu machen passt auf Groß- und Kleinschreibung)
[[ ${(L)LINUX_CONF} = no ]] && echo linux
(In Kleinbuchstaben-Operator umwandeln)
set -o rematchpcre
[[ $LINUX_CONF =~ '^(?i)no\z' ]]
(PCRE-Syntax)
ksh93
[[ $LINUX_CONF = ~(i)no ]]
oder
[[ $LINUX_CONF = ~(i:no) ]]
Beachten Sie, dass alle obigen Ansätze außer [nN][oO]
sind um die Groß-/Kleinschreibung zu berücksichtigen, hängt von der Ländereinstellung des Benutzers ab. Nicht alle Menschen auf der ganzen Welt sind sich einig, was die Großbuchstabenversion eines bestimmten Buchstabens ist, nicht einmal für ASCII-Buchstaben.
In der Praxis scheinen sich die Abweichungen von den englischen Regeln für die ASCII-Regeln, zumindest auf GNU-Systemen, auf i
zu beschränken und I
Buchstaben und ob der Punkt in der Groß- oder Kleinschreibung vorhanden ist oder nicht.
Das bedeutet, dass [[ ${VAR,,} = oui ]]
stimmt nicht garantiert mit OUI
überein in jedem Gebietsschema (selbst wenn der Fehler in aktuellen Versionen von bash
ist behoben).
Behalten Sie Ihren vorhandenen Befehl bei, aber in der Zeile, bevor Sie Folgendes ausführen:
LINUX_CONF=$(echo $LINUX_CONF | awk '{ print tolower($0) }')
Unabhängig von der Groß-/Kleinschreibung des in Ihrer Variablen gespeicherten Werts wird der Ersatzwert dadurch in Kleinbuchstaben geschrieben. Dies führt dazu, dass Ihr vorhandener Befehl mit nur einer zusätzlichen Codezeile abgeglichen wird.