Bash 大写字母的脚本检查字符串

Bash script check string for uppercase letter

我正在尝试检查字符串中是否存在任何大写字母。我的代码显示任何输入都没有上限,可能是 "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,即数字之外的任何内容。 sssSssSSS都只包含字母,因此无法匹配。

[[ $password =~ [A-Z] ]]

如果密码包含任何大写字母则为真。

你应该在运行这种测试之前设置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:].

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

无论我如何 运行 这个脚本我都遇到了麻烦,直到我将它更改为让我的输入字符串为 $1,然后设置 pass=$1。我也稍微改变了正则表达式。下面是我最终能够正常工作的内容。然后我可以 运行 bash (script) John 并得到有效的回复。希望这有帮助。

pass=
if [[ "$pass" =~ ^[A-Z] ]]
then
   echo "Upper found"
else
   echo "No Upper"
fi