変数が[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
入力検証に使用したいようです。