2015-04-27 140 views
1

我下面想了一些测试,在shell脚本:嵌套命令和管道命令

line="100:xx" 
echo "$line" | grep -Po \\d+ 

结果:100

但是,

line="100:xx" 
echo `echo "$line" | grep -Po \\d+` 

结果为空

为什么?

+0

是'echo'$ line“'显示正确的值?如何:'line =“100:xx”echo''echo“$ line”| grep -Po \\ d + \'' – Filype

+1

因为您使用的是反引号而不是'$()',所以它们会被吸引。 –

+2

它正在逃避反斜杠。试试'echo \'echo“$ line”| grep -Po \\\ d + \''或echo''echo“$ line”| grep -Po'\\ d +'\''(但是切换到'$()',反引号已经被弃用很长时间了。) – Biffen

回答

4

因为反引号允许像双引号中的字符串的扩展,您反斜线一个被过早地吃掉:

$ echo `echo "$line" | grep -Po \\d+ | cat` 

$ echo `echo "$line" | grep -Po \\\d+` 
100 

话虽这么说,只是引用正则表达式

$ echo `echo "$line" | grep -Po '\d+'` 
100 
+0

围绕单引号正则表达式是要走的路。 –

2

你也可以这样做:

echo $(echo "$line" | grep -Po \\d+) 

避免反斜杠被吃掉。