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]