带有双括号的 bash 测试无法正确验证正则表达式



我是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"),这清楚地表明您传递的值在数组中具有0索引。位置参数从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]

相关内容

  • 没有找到相关文章

最新更新