bashスクリプト:変数が[AZ]にあることを確認してください。

bashスクリプト:変数が[AZ]にあることを確認してください。

変数が[AZ]にあるかどうかを確認するには?

私は次のことを達成したいと思います:

read var

while [ $var in [A-Z] ]
do
 #code here
done

どうやってこれを達成できますか?

答え1

==Bashでは、次の右側にパターンを使用できます[[ ... ]]

read var
LC_ALL=C # Turn off locale.
if [[ $var == [A-Z] ]] ; then
    echo yes
fi

参加したくない場合は、y地域設定をオフにする必要がありますA-Z

答え2

シンプルな1つのライナーは次のとおりです。

re='[a-zA-Z]'; if [[ Z =~ $re ]]; then echo "Match"; else echo "No match"; fi

完全なスクリプトは次のとおりです。

#!/bin/bash

re='[a-zA-Z]'
read -p "Enter a char or string > " var

if [[ "$var" =~ $re ]]; then
    echo "Entered string matches."
else 
    echo "Entered string does not match";
fi

答え3

$var単一文字を想定すると、次のようになります。

これを使用した場合、どのシェルcaseにも移植可能です。sh

case "$var" in [A-Z]) thing_to_do_here ;; esac

でも

case "$var" in [[:upper:]]) thing_to_do_here ;; esac

アンバランスカッコが好きではない人のために、次のように書くことができます

case "$var" in ([[:upper:]]) thing_to_do_here ;; esac

答え4

Bashの正規表現に依存したくない場合:

remainder=$(tr -d A-Z <<<$var)
while [ ! -z $remainder ];do
    read -p "Invalid value entered. Please try again." var
    remainder=$(tr -d A-Z <<<$var)
done

入力検証に使用したいようです。

関連情報