文字列の大文字をチェックしようとしています。私のコードは、「sss」、「Sss」、「SSS」のいずれの入力に対しても大文字が表示されません。
if [[ "$pass" =~ [^a-zA-Z0-9] ]]
then
echo "Upper found"
else
echo "no upper"
fi
[^a-zA-Z0-9]
は、a-z
、つまり小文字、A-Z
、つまり大文字、および0-9
、つまり数字以外のものを意味します。 sss
、Sss
、SSS
にはすべて文字だけが含まれているため、一致させることはできません。
[[ $password =~ [A-Z] ]]
パスワードに大文字が含まれている場合はtrueです。
たとえば、この種のテストを実行する前に、LC_ALL
を設定する必要があります。
$ LC_ALL=cs_CZ.UTF-8 bash -c '[[ č =~ [A-Z] ]] && echo match'
match
$ LC_ALL=C bash -c '[[ č =~ [A-Z] ]] && echo match'
# exit-code: 1
[[:upper:]]
は常に機能するはずです。
あなたの正規表現は間違っています。 [A-Z]または[:upper:]を使用します。