我编写的脚本涉及生成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。
答案 0 :(得分:1)
在它周围加上引号。你不需要逃避其中的双引号:
awk "$(echo 'BEGIN { print "hello!" }')"
答案 1 :(得分:1)
我也想知道你为什么使用echo语句。 Awk不需要一个。
awk 'BEGIN { print "Awk SQUAWK!" }'
这将完美无缺。