GNU/Linux >> Znalost Linux >  >> Linux

bash - shoda proměnné bez ohledu na velikost písmen

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.


Linux
  1. Bash skriptování (I)

  2. Použití odkazu na proměnnou bashového řetězce v Sed?

  3. Jednoduchá závorka v přiřazení proměnné Bash?

  1. Jak otestuji, zda je proměnná číslo v Bash?

  2. Linux bash:Přiřazení více proměnných

  3. Alias ​​s proměnnou v bash

  1. předání grepu do proměnné v bash

  2. Porovnávání vzorů skriptů Bash

  3. Jak odstranit proměnnou pouze pro čtení v bash?