"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
, ksh
oder 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 bash
die 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 test
oder 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