我下面想了一些测试,在shell脚本:嵌套命令和管道命令
line="100:xx"
echo "$line" | grep -Po \\d+
结果:100
但是,
line="100:xx"
echo `echo "$line" | grep -Po \\d+`
结果为空
为什么?
我下面想了一些测试,在shell脚本:嵌套命令和管道命令
line="100:xx"
echo "$line" | grep -Po \\d+
结果:100
但是,
line="100:xx"
echo `echo "$line" | grep -Po \\d+`
结果为空
为什么?
因为反引号允许像双引号中的字符串的扩展,您反斜线一个被过早地吃掉:
$ echo `echo "$line" | grep -Po \\d+ | cat`
$ echo `echo "$line" | grep -Po \\\d+`
100
话虽这么说,只是引用正则表达式
$ echo `echo "$line" | grep -Po '\d+'`
100
围绕单引号正则表达式是要走的路。 –
你也可以这样做:
echo $(echo "$line" | grep -Po \\d+)
避免反斜杠被吃掉。
是'echo'$ line“'显示正确的值?如何:'line =“100:xx”echo''echo“$ line”| grep -Po \\ d + \'' – Filype
因为您使用的是反引号而不是'$()',所以它们会被吸引。 –
它正在逃避反斜杠。试试'echo \'echo“$ line”| grep -Po \\\ d + \''或echo''echo“$ line”| grep -Po'\\ d +'\''(但是切换到'$()',反引号已经被弃用很长时间了。) – Biffen