2014-10-05 53 views
0

我知道猛砸的基礎知識,但往往錯過了細微差別和我在使用它來實現我所希望將是一個相當簡單的問題一個問題:擴大變量

如果我有 - 這是一個JSON字符串 - 和標識數組元素,其中是「reference_data」

cbType=`echo $configuration | jsawk -a 'return _.where(this,{name: "reference_data"})'` 

這需要$configuration:在bash腳本,工程完全按照我希望它下面並僅返回該對象/哈希定義。請注意,這確實使用了非常方便的jsawk實用程序,但它已被設計成具有良好的命令行行爲。

問題是,當我用變量移除硬編碼的「reference-data」時,它似乎無法引用變量的範圍。因此,例如,...

myVar="\"reference_data\"" 
cbType=`echo $configuration | jsawk -a 'return _.where(this,{name: $myVar})'` 

是否工作,而不是返回的jsawk錯誤:

jsawk: js error: ReferenceError: $myVar is not defined

有什麼我可以做強制執行第一變量擴大,然後命令字符串被執行?

+0

你介意給出一個報價去哪兒的例子嗎?我嘗試了很多組合,但都沒有工作。 – ken 2014-10-05 19:58:20

+0

如果變量位於單引號內,則不會展開。 – 2014-10-05 20:02:39

+0

當然,這是有道理的...不知道爲什麼我所有的歷史在Perl或PHP的日子沒有讓我想到這一點。在一個側面說明中,你可以把它作爲答案,我會將其標記爲正確的。謝謝你的幫助! – ken 2014-10-05 20:06:33

回答

1

如果不在雙引號內,則聲明的變量不會被擴展。所以把你的代碼放在雙引號內而不是單引號中。

myVar="\"reference_data\"" 
cbType=$(echo "$configuration" | jsawk -a "return _.where(this,{name: $myVar})") 
+0

我可能會在jsawk腳本中而不是在變量中推薦轉義引號。在變量中可以看作是一種普遍的模式(這導致了[BashFAQ050](http://mywiki.wooledge.org/BashFAQ/050))。 – 2014-10-05 22:12:04