Zignoruj ​​wielkość liter wprowadzoną przez użytkownika


1

Próbuję napisać skrypt, aby przechwycić dane wejściowe użytkownika. Skrypt powinien zignorować sprawę.

Rozważ ten skrypt foo.sh:

if [ $1 == "string" ]; then
  echo true
else
  echo false
fi

Jeśli wartość wejściowa foo.shto STRINGlub StRiNgwynik będzie fałszywy.

Jak mogę zignorować przypadek w takim ifstanie?


3
Powinieneś użyć [[ "$1" == "string" ]]zamiast [ $1 == "string" ]. W przeciwnym razie wpadniesz w kłopoty, jeśli $1zawiera spacje lub jest pusty.
mpy

Odpowiedzi:


3

Zakładając, że używasz bash 4.0+:

${1,,}

W przeciwnym razie trlub awkpowinien działać:

var=$(echo "$1" | awk '{print tolower($0)}')
var=$(echo "$1" | tr '[:upper:]' '[:lower:]')

Streszczenia:

  • Awk pobiera dane wejściowe i po prostu drukuje $0(całą linię wejściową) po użyciu wbudowanej tolower()funkcji.

  • Tr wygląda całkiem zrozumiale, ale daj mi znać, jeśli masz pytania.


lepiej zacytować"$a"
glenn jackman

1

declare ma funkcję małych liter:

declare -l str=$1
[[ $str = "string" ]] && echo true || echo false

Istnieje również nocasematchopcja powłoki, której można użyć.
gniourf_gniourf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.