![bashスクリプト:変数が[AZ]にあることを確認してください。](https://linux33.com/image/50302/bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%EF%BC%9A%E5%A4%89%E6%95%B0%E3%81%8C%5BAZ%5D%E3%81%AB%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82.png)
変数が[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
入力検証に使用したいようです。