没有双引号的分组命令替换? “$()”没有“”

时间:2014-07-20 08:58:59

标签: bash awk words command-substitution

我编写的脚本涉及生成Awk程序并通过awk $(...)运行它们,如

[lynko@hephaestus] ~ % awk $(echo 'BEGIN { print "hello!" }')

生成的程序最终会变得更复杂,但首先我要确保这是可能的。在过去,我已经完成了

[lynko@hephaestus] ~ % program=$(echo 'BEGIN { print "hello" }')
[lynko@hephaestus] ~ % awk "$program"
hello!

分组并不令人惊讶。但是第一个例子(在GNU awk下,它提供了比我在其他机器上默认的mawk更有用的错误消息)给出了

[lynko@hephaestus] ~ % awk $(echo 'BEGIN { print "hello!" }')
awk: cmd. line:1: BEGIN blocks must have an action part

大概是因为这是awk BEGIN { print "hello!" }而不是awk 'BEGIN { print "hello!" }'。有没有办法可以强制$(...)保持为一个群体?我不想使用"$()",因为我必须要逃避程序生成器中的所有双引号。

我在Crunchbang Waldorf上运行Bash 4.2.37和mawk 1.3.3。

2 个答案:

答案 0 :(得分:1)

在它周围加上引号。你不需要逃避其中的双引号:

awk "$(echo 'BEGIN { print "hello!" }')"

答案 1 :(得分:1)

我也想知道你为什么使用echo语句。 Awk不需要一个。

awk 'BEGIN { print "Awk SQUAWK!" }'

这将完美无缺。