我不知道如何在bash中正确使用正则表达式,我试图以这种方式做错误,正则表达式验证有什么问题?
#!/bin/bash
if [ ! $# -eq 1 ]; then
echo "Error: wrong parameters"
else
if [ $1 =~ "[a-z]" ]; then
echo "$1: word"
elif [ $1 =~ "[0-9]" ]; then
echo "$1: number"
else
echo "$1: invalid parameter"
fi
fi
答案 0 :(得分:11)
我已经重新编写了您的脚本,并通过以下方式获得了预期的结果:
#!/bin/bash
if [ ! $# -eq 1 ]; then
echo "Error: wrong parameters"
else
if [[ $1 =~ ^[a-z]+$ ]]; then
echo "$1: word"
elif [[ $1 =~ ^[0-9]+$ ]]; then
echo "$1: number"
else
echo "$1: invalid parameter"
fi
fi
您无需引用正则表达式。
答案 1 :(得分:5)
Don't quote the regex,并使用双括号:
[[ "$1" =~ [a-z] ]]
在这个特定情况下引用变量并不是绝对必要的,但它并没有什么坏处,因为与word splitting相关的非常非常多的陷阱,总是引用包含变量的字符串是一种好习惯。 / p>
答案 2 :(得分:-1)
使用两个括号:
if [[ "$1" =~ [a-z] ]] ; then