次のように、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!" }'
です。強制的$(...)
に 1 つのグループにとどまる方法はありますか? "$()"
プログラムジェネレーターですべての二重引用符をエスケープする必要があるため、使用したくありません。
Crunchbang Waldorf で Bash 4.2.37 と mawk 1.3.3 を実行しています。