为什么遵循正则表达式不匹配?为什么这个Bash正则表达式不起作用?
dev="$1"
regex="[a-zA-z]+([0-9]+)"
echo $dev
if [[ "$dev" =~ $regex ]]
then
echo "Got a match: ${BASH_REMATCH[1]}"
else
echo "Could not craete routing table reference due to incorrect device name [$dev]"
fi
这给了我一些在线测试工具的输出
tun0
Could not craete routing table reference due to incorrect device name [tun0]
相同的正则表达式正常工作如。 http://regexraptor.net/
击版本GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
您应该知道'[[...]'是一个*括号表达式*大小写)范围*校对元素*是区域设置相关的。要禁用语言环境依赖关系,您可以在顶部添加一个“export LC_ALL = C”行,并且您的正则表达式将按照您定义的方式“工作”。然而,在这种情况下,'A-z'会比你需要的匹配更多(''''''''',',''''等等)。 –