web-dev-qa-db-ja.com

大文字のBashスクリプトチェック文字列

文字列の大文字をチェックしようとしています。私のコードは、「sss」、「Sss」、「SSS」のいずれの入力に対しても大文字が表示されません。

if [[ "$pass" =~ [^a-zA-Z0-9] ]]
then
   echo "Upper found"
else
   echo "no upper"
fi
5
Vlasiu Robert

[^a-zA-Z0-9]は、a-z、つまり小文字、A-Z、つまり大文字、および0-9、つまり数字以外のものを意味します。 sssSssSSSにはすべて文字だけが含まれているため、一致させることはできません。

[[ $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:]]は常に機能するはずです。

6
choroba

あなたの正規表現は間違っています。 [A-Z]または[:upper:]を使用します。

https://en.wikipedia.org/wiki/Regular_expression

0