2017-03-15 111 views
2

當我給這樣它的工作值:傳遞擊變捲曲

curl --silent \ --insecure \ -X POST \ -d '{"Name" : "Vikram"}' \ -H "Content-Type: application/json" \ $restUrl 

但是當我給它這樣的:

post="'{\"Name\" : \"Vikram\"}'"  
echo $post // Prints '{"Name" : "Vikram"}' 
echo ${post} // Prints '{"Name" : "Vikram"}' 

但下面不工作,並拋出一個400錯誤:

curl --silent \ --insecure \ -X POST \ -d ${post} \ -H "Content-Type: application/json" \ $restUrl 

回答

3

看來有多個問題。

1)要解決標題提出的問題,當您使用$ post作爲參數時,其值中的空白將導致它被Bash視爲多個參數。嘗試在它周圍引用引號,以便將其視爲一個參數。

2)我猜你已經爲$ post添加了單引號,試圖讓Bash把它當作一個單獨的參數。嘗試刪除單引號。

3)至少對於我來說,curl命令中的所有反斜槓都會導致它失敗。也許你已經把它分成了多行,複製/粘貼並沒有翻譯。我在下面的示例中刪除了它們。

把所有在一起:

post="{\"Name\" : \"Vikram\"}" 
curl --silent --insecure -X POST -d "${post}" -H "Content-Type: application/json" $restUrl 
+0

但仍然得到相同的錯誤我試着你的建議,但我無法解決問題。 – Vikram

+0

@Vikram我已經更新了我的答案。我想你可能也有單引號,你想刪除。如果不知道服務器端的$ restUrl是什麼,很難說。 – twm

+0

刪除單引號爲我工作!謝謝 – Vikram

0

你要引用${post}"${post}",這樣你的腳本不拆你的變量的內容。

1

不要把單引號放在$post變量中,把它們放在值的引號中。那麼你不需要在值內部雙引號。當您在curl命令行中使用它,防止它被分成多個參數

post='{"Name" : "Vikram"}' 

然後引用變量。

您也不應該在curl命令行中擁有所有反斜槓。他們正在逃離他們之後的空間,所以他們將被視爲字面意思而不是分隔符。在命令中使用反斜槓的通常時間是,如果你將它分割成多行,那麼你需要轉義換行符,以便它不會結束命令。

curl --silent --insecure -X POST -d "${post}" -H "Content-Type: application/json" "$restUrl" 
+0

contentType =「Content-Type:application/json」 如何將其包含在標題中,例如-H $ {contentType}不起作用。任何解決方法 – Vikram

+0

您是否閱讀過我的答案?關於引用變量有什麼意義? – Barmar

+0

@Vikram 99%的時間你想引用變量時,你使用它們。 – Barmar