我正在尝试检查任何大写字母的字符串。我的代码显示任何输入没有UPPER,可能是“sss”,“Sss”,“SSS”
if [[ "$pass" =~ [^a-zA-Z0-9] ]]
then
echo "Upper found"
else
echo "no upper"
fi
答案 0 :(得分:3)
[^a-zA-Z0-9]
表示除a-z
以外的任何内容,即小写字母A-Z
,即大写字母和0-9
,即数字。 sss
,Sss
,SSS
都只包含字母,因此无法匹配。
[[ $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:]]
应始终有效。
答案 1 :(得分:0)
你的正则表达式错了。使用[A-Z]或[:upper:]。
答案 2 :(得分:0)
无论如何运行它,我都遇到麻烦,直到更改它以使输入字符串为$ 1,然后设置pass = $ 1。我也更改了正则表达式。我终于可以正常工作的内容如下。然后,我可以运行bash(脚本)John并获得有效的响应。希望这会有所帮助。
pass=$1
if [[ "$pass" =~ ^[A-Z] ]]
then
echo "Upper found"
else
echo "No Upper"
fi