2016-07-15 115 views
0

我正在嘗試在bash腳本內執行cURL命令以發佈到URI。該命令要求其中一個參數被雙引號和單引號括起來,即'"jsimmons"'在我的腳本中,但是這個參數是一個變量,所以命令一直失敗,我相信這是因爲變量做了一些奇怪的擴展,並且命令丟失了引號必要。用多個引號擴展bash變量?

對於我當前的嘗試,這是行不通的,參數看起來像'""$watcher""',因爲我試圖展開該變量並將該字符串放在雙引號和單引號內。

如何正確地擴展我的變量以滿足命令的要求?

+2

ATLEAST粘貼代碼的相關部分,你所面臨的 – Fazlin

+1

XY錯誤問題:你是否試圖對字符串「jsimmons」進行JSON編碼? – chepner

+0

如果最外層的引號是單引號,那麼當前shell將不會擴展字符串內的變量引用。單引號字符串中沒有轉義字符。下一個單引號無條件地結束字符串,不管反斜槓或任何其他「轉義」字符。 –

回答

2

如果你在整個命令周圍有雙引號,你可以毫無困難地插入單引號,但是需要加雙引號。

例如:

$ watcher=jsimmons 
$ echo "'\"$watcher\"'" 
'"jsimmons"' 
+2

我懷疑單引號實際上並不必要,除了確保雙引號逐字傳遞之外。 – chepner

0

可以逃避周圍' S和" s的\

\'\"$watcher\"\'

+0

你期望'\''做什麼? –

+0

如果它們未被轉義,'$ watcher'變量不會被擴展,因此它會導致'\「$ watcher \」'。 ''''也不會擴大,因爲「在單引號內,除'''之外的每個特殊字符都被字面解釋,」http://tldp.org/LDP/abs/html/quotingvar.html – Kyriakos