2016-01-05 59 views
0

我正在嘗試執行一個使用預定義變量作爲標題的curl命令。如何在curl命令中將標題作爲參數傳遞?

header='-H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51"' 

而且這本質上是curl命令

curl $header -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

,然後返回錯誤信息

rl: (6) Could not resolve host: application 
curl: (6) Could not resolve host: 7feb6e62-35da-4def-88e9-376e788ffd97" 
curl: (6) Could not resolve host: 51" 

可正常工作

curl -H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51" -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

的原因,我試圖通過標題作爲一個變量是因爲我正在編寫一個循環和數組的腳本,但目前由於某種原因,這不適用於標題。沒有任何問題爲身體傳遞參數。

+0

分詞使得你的頭部參數爲'-H',''Content-Type:','application/json「等。我建議你使用一個數組來保存頭文件。否則,你可能需要'eval'。 – 4ae1e1

+0

你會在curl命令中執行eval命令嗎? –

回答

2

請注意,在bash中的變量擴展可以很容易地使人們不受警戒。

一個很好的經驗法則是在你想擴展的任何變量周圍加雙引號,如curl '$header' -w 'http code: %{http_code}\\n' -X POST -d '$BOD' '$URL'

如果Bash總是出現在變量中,或者它們出現在雙引號中,它總是會擴展$SOMETHING變量。 (如果它們出現在單引號中,則不適用)。

當擴展雙引號時,它們被shell視爲單個「標記」,無論如何。

擴展時而不是雙引號,它們將被解析,就好像您鍵入了它們的內容而不是變量。所以 - 如果該變量有空格,這可能意味着shell會將它們當作參數之間的分隔符。

+1

謝謝,這最終修復了它。用單引號替換雙引號。 –

相關問題