我确信这是一个简单的疏忽,但我没有看到它,而且我不确定为什么这个正则表达式匹配得比它应该更多:
#!/bin/bash
if [[ $1 =~ ([0-9]+,)+[0-9]+ ]]; then
{
echo "found list of jobs"
}
fi
输入看起来像“02,48,109,309,183”。匹配很好
但是,它也匹配没有最终号码的输入,而是“09,28,34”,
最后[0-9]+
是否应该指定最终字符至少为1 +?
答案 0 :(得分:5)
您必须为输入的开头(^
)和结尾($
)添加标记:
#!/bin/bash
if [[ $1 =~ ^([0-9]+,)+[0-9]+$ ]]; then
echo "found list of jobs"
fi
否则它与09,28,34,
匹配,因为它匹配0
到4
,忽略了后面的所有内容。
答案 1 :(得分:4)
你的正则表达式只需匹配字符串中的,而不是从头到尾。要使其与整个字符串匹配,请使用^
和$
元字符:
#!/bin/bash
if [[ $1 =~ ^([0-9]+,)+[0-9]+$ ]]; then
echo "found list of jobs"
fi
(顺便说一句,您不需要{
和}
来定义Bash中的块,这是then
和fi
的作用