bash 双括号测试不能正确验证正则表达式
bash test with double brackets doesn't validate regex correctly
我是 bash 脚本世界的新手,在学习期间我写了一个简单的密码验证器脚本:
#! /bin/bash
args=("$@")
PASSWORD=${args[1]}
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
echo "PASSWORD LEGIT"
else
echo "WRONG PASSWORD"
fi
使用参数PassWord12
,它应该输出PASSWORD LEGIT
,但它没有。
我使用双括号而不是 'test' 语法。
我究竟做错了什么?
谢谢。
如果你 运行 declare -p args
,你会得到 declare -a args=([0]="PassWord12")
这清楚地表明你传递的值在大批。位置参数从 1
开始,但数组索引从 0
.
开始
您可以使用
args=("$@")
PASSWORD="${args[0]}"
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
echo "PASSWORD LEGIT"
else
echo "WRONG PASSWORD"
fi
如果您 echo
$PASSWORD
,您会看到传递给脚本的值。
请注意,您可能想使用 [[:alnum:]]
而不是 [0-9A-Za-z]
。
我是 bash 脚本世界的新手,在学习期间我写了一个简单的密码验证器脚本:
#! /bin/bash
args=("$@")
PASSWORD=${args[1]}
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
echo "PASSWORD LEGIT"
else
echo "WRONG PASSWORD"
fi
使用参数PassWord12
,它应该输出PASSWORD LEGIT
,但它没有。
我使用双括号而不是 'test' 语法。
我究竟做错了什么?
谢谢。
如果你 运行 declare -p args
,你会得到 declare -a args=([0]="PassWord12")
这清楚地表明你传递的值在大批。位置参数从 1
开始,但数组索引从 0
.
您可以使用
args=("$@")
PASSWORD="${args[0]}"
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
echo "PASSWORD LEGIT"
else
echo "WRONG PASSWORD"
fi
如果您 echo
$PASSWORD
,您会看到传递给脚本的值。
请注意,您可能想使用 [[:alnum:]]
而不是 [0-9A-Za-z]
。