簡體   English   中英

沒有雙引號的分組命令替換? “ $()”不帶“”

[英]Grouping command substitution without double quotes? “$()” without the “”

我正在編寫一個腳本,該腳本涉及生成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!" }而不是awk 'BEGIN { print "hello!" }' awk 'BEGIN { print "hello!" }' 有什么方法可以迫使$(...)保留為一組? 我寧願不使用"$()"因為我必須在程序生成器中轉義所有雙引號。

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

用引號引起來。 您不需要轉義其中的雙引號:

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

我也想知道為什么您要使用echo語句。 Awk不需要一個。

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

那將完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM