変数で文字列の大文字と小文字(大文字と小文字)を変更するには?

変数で文字列の大文字と小文字(大文字と小文字)を変更するには?
"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

bashkshまたは(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

関連情報