在awk中使用双引号

时间:2017-10-23 04:09:27

标签: linux shell

此命令将打印a

echo "line1 a b c" | awk '{ print $2 }'

如果我将单引号更改为双引号,就像这样,它将打印整行。

echo "line1 a b c" | awk "{ print $2 }"

为什么呢?我知道我应该使用单引号,但如果我使用双引号,为什么打印整行?

1 个答案:

答案 0 :(得分:6)

如果awk命令是单引号,则$2不会被shell解释,而是作为文字字符串$2传递给awk。然后,awkprint输入字符串中的第二个以空格分隔的标记,在本例中为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