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?

The KingMaker
źródło
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.

nerdwaller
źródło
lepiej zacytować"$a"
glenn jackman
1

declare ma funkcję małych liter:

declare -l str=$1
[[ $str = "string" ]] && echo true || echo false
Glenn Jackman
źródło
Istnieje również nocasematchopcja powłoki, której można użyć.
gniourf_gniourf