regex Bash正则表达式返回意外输出[重复]

vptzau2j  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(108)

此问题已在此处有答案

bash regex with quotes?(5个答案)
3天前关闭。
我有一个bash脚本experiments.sh

if [[ $1 =~ "^[0-9]$" ]]; then
        echo true
else
        echo false
fi

然后这样命名:

bash experiments.sh 8

由于这个简单的正则表达式接受任何数字,我希望输出为true。但是脚本返回false。这怎么可能呢?

yc0p9oo0

yc0p9oo01#

在正则表达式中,bash$1的内容视为文字字符串^[0-9]$,例如:

$ experiments.sh ^[0-9]$
true

简单的解决方案是删除双引号,例如:

if [[ $1 =~ ^[0-9]$ ]]; then
        echo true
else
        echo false
fi

另一种方法是将正则表达式赋给一个变量,然后在条件中引用该变量,例如:

regex="^[0-9]$"

if [[ $1 =~ $regex ]]; then
        echo true
else
        echo false
fi

**注意:**这是一种情况,您 * 不 * 将$regex用双引号括起来,否则bash将查找$1以包含文字字符串$regex

相关问题