此命令将打印a
。
echo "line1 a b c" | awk '{ print $2 }'
如果我将单引号更改为双引号,就像这样,它将打印整行。
echo "line1 a b c" | awk "{ print $2 }"
为什么呢?我知道我应该使用单引号,但如果我使用双引号,为什么打印整行?
答案 0 :(得分:6)
如果awk
命令是单引号,则$2
不会被shell解释,而是作为文字字符串$2
传递给awk
。然后,awk
将print
输入字符串中的第二个以空格分隔的标记,在本例中为a
。
echo "line1 a b c" | awk '{ print $2 }' # prints the second space-delimited token
> a
如果awk
命令是双引号,则$2
由shell解释。因为$2
为空(在本例中),所以替换空字符串。 awk
看到一个看起来像awk "{ print }"
的命令,这是打印所有内容的指令。
echo "line1 a b c" | awk '{ print }' # prints all input
> line1 a b c
也可以使用双qotes,并转义$
,这将导致$
不被shell解释,而$2
字符串将被传递到awk
。
echo "line1 a b c" | awk "{ print \$2 }" # prints the second space-delimited token
> a