在awk中使用双引号[重复]

问题描述 投票:2回答:1

此命令将打印a

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

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

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

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

linux shell
1个回答
6
投票

如果awk命令是单引号,则$2不会被shell解释,而是作为文字字符串$2传递给awkawk然后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
© www.soinside.com 2019 - 2024. All rights reserved.