"Enter test: "
read test
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
これは私がやっているテストの簡単な説明ですが、「A」と入力すると失敗します。一致するかどうかをテストできるように、変数ステップですべての項目を小文字に変更することができますか?
答え1
sh
標準(POSIXおよびBourne)構文を使用してください。
case $answer in
a|A) echo OK;;
*) echo >&2 KO;;
esac
または:
case $answer in
[aA]) echo OK;;
*) echo >&2 KO;;
esac
bash
、ksh
または(zsh
この非標準構文をサポートする[[...]]
3つのシェル)を使用して、以下を宣言できます。小文字変える:
typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...
(bash
一部のロケールでは、変換が偽であることに注意してください。)
答え2
これを達成するためのいくつかの便利な方法があります(参考資料を参照bash
)。
小切手2個
echo -n "Enter test: "
read test
if [[ $test == "a" || $test == "A" ]]; then
echo "worked"
else
echo "failed"
fi
入力を小文字に設定
echo -n "Enter test: "
read test
test="${test,,}"
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
どちらの場合も正規表現
echo -n "Enter test: "
read test
if [[ $test =~ ^[aA]$ ]]; then
echo "worked"
else
echo "failed"
fi
シェルが大文字と小文字を無視するようにする
echo -n "Enter test: "
read test
shopt -s nocasematch
if [[ $test == a ]]; then
echo "worked"
else
echo "failed"
fi
答え3
これを行う方法はいくつかあります。最新バージョンのbashを使用している場合は非常に簡単です。大文字と小文字を変換するtest
か、正規表現を使用して大文字と小文字を一致させることができます。
最初は正規表現の方法です。
read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no
これで大文字と小文字の変換が行われます。
read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no
答え4
sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty