Wie ändere ich die Groß- und Kleinschreibung von Zeichenfolgen in meiner Variable?

Wie ändere ich die Groß- und Kleinschreibung von Zeichenfolgen in meiner Variable?
"Enter test: "
read test

if [[ $test == "a" ]]; then
    echo "worked"
else
    echo "failed"
fi

Dies ist eine einfache Darstellung des Tests, den ich durchführe, aber wenn ich „A“ eingebe, schlägt er fehl. Kann ich im Variablenstadium irgendetwas tun, um alles in Kleinschreibung umzuwandeln, damit der Test übereinstimmt?

Antwort1

Verwenden Sie einfach die Standardsyntax sh(POSIX und Bourne):

case $answer in
  a|A) echo OK;;
  *)   echo >&2 KO;;
esac

Oder:

case $answer in
  [aA]) echo OK;;
  *)    echo >&2 KO;;
esac

Mit bash, kshoder zsh(den 3 Shells, die diese nicht standardmäßige [[...]]Syntax unterstützen) können Sie einKleinbuchstabenVariable:

typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...

(Beachten Sie, dass bashdie Groß-/Kleinschreibung in einigen Gebietsschemas falsch ist.)

Antwort2

Es gibt mehrere nützliche Möglichkeiten, dies zu erreichen (in bash):

zwei Schecks

echo -n "Enter test: "
read test

if [[ $test == "a" || $test == "A" ]]; then
    echo "worked"
else
    echo "failed"
fi

Geben Sie Kleinbuchstaben ein

echo -n "Enter test: "
read test
test="${test,,}"

if [[ $test == "a" ]]; then
    echo "worked"
else
    echo "failed"
fi

Regex für beide Fälle

echo -n "Enter test: "
read test

if [[ $test =~ ^[aA]$ ]]; then
    echo "worked"
else
    echo "failed"
fi

die Shell die Groß-/Kleinschreibung ignorieren lassen

echo -n "Enter test: "
read test

shopt -s nocasematch
if [[ $test == a ]]; then
    echo "worked"
else
    echo "failed"
fi

Antwort3

Es gibt mehrere Möglichkeiten, dies zu tun. Wenn Sie eine aktuelle Version von Bash verwenden, ist es ganz einfach: Sie können die Groß-/Kleinschreibung von ändern testoder einen regulären Ausdruck verwenden, um sowohl Groß- als auch Kleinschreibung von a abzugleichen.

Zuerst die Regex-Methode:

read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no

Nun der Fallwechsler:

read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no

Antwort4

sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty

verwandte Informationen