我正在尝试针对正则表达式验证用户输入。
vari=A
if [ $vari =~ [A-Z] ] ;
then
echo "hurray"
fi
我得到的输出是swf.sh [3]:=〜:未知的测试操作符。
请告诉我可以使用的测试操作员吗?
答案 0 :(得分:8)
它没有内置,你需要使用grep:
if echo "$vari" | grep -q '[A-Z]'; then
echo hurray
fi
如果要匹配整个字符串,请记住使用正则表达式锚点^
和$
。请注意,-q
标志使grep变得安静,因此它的唯一输出是返回值,用于匹配/不匹配。
答案 1 :(得分:1)
POSIX shell没有正则表达式运算符(或者更确切地说,POSIX test
命令没有)。相反,您使用expr
命令执行(有限的)正则表达式匹配。
if expr "$vari" : '[A-Z]' > /dev/null; then
(我说“有限”因为它总是在字符串的开头匹配,就像正则表达式以^
开头一样。)如果匹配,则退出状态为0;它还会写入与标准输出匹配的字符数,因此重定向到/dev/null
。
如果您实际使用bash
,则需要使用[[
命令:
if [[ $vari =~ [A-Z] ]]; then
答案 2 :(得分:0)
尝试如下:
if [[ $vari =~ "[A-Z]" ]]
then
echo "hurray"
fi