GNU/Linux >> LINUX-Kenntnisse >  >> Linux

bash - Vergleich der Variablen ohne Berücksichtigung der Groß-/Kleinschreibung

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.


Linux
  1. Bash Dynamische (Variable) Variablennamen?

  2. Verwenden einer Referenz auf eine Bash-String-Variable in Sed?

  3. Einzelne Klammer in der Bash-Variablenzuweisung?

  4. Glob ohne Berücksichtigung der Groß-/Kleinschreibung auf zsh/bash

  5. Wie teste ich, ob eine Variable in Bash eine Zahl ist?

Bash-Declare-Anweisung:Syntax und Beispiele

Bash-Exportvariable

Bash printf - So drucken Sie eine Variable in Bash

Bash-Scripting – Variablen mit Beispielen erklärt

So setzen Sie die Umgebungsvariable in Bash

Wie lösche ich eine schreibgeschützte Variable in Bash?