我正在編寫一個腳本來爲給定的用戶輸入執行CURL命令。腳本有多個幫助函數來創建最終傳遞給CURL的參數列表(參數)。Bash,curl,eval和whitespace
一個剝離出來例子,如下:
#!/bin/bash
function create_arg_list
{
# THIS HTTP HEADER VALUE COMES FROM THE USER and MAY CONTAIN SPACES
local __hdr="x-madhurt-test:madh urt"
local __params="http://google.co.in -X GET -H '$__hdr'"
local __resultvar="$1"
eval $__resultvar="\"$__params\""
echo "params after eval : $__resultvar"
}
create_arg_list arg_list
echo "params after eval in main code : $arg_list"
echo "Running command : curl -v $arg_list"
curl -v $arg_list
腳本在他們的偉大工程時,輸入參數(文件路徑,網址等)都(引用)的空白。但是,當應該作爲HTTP標題傳遞給CURL的參數包含空格時,腳本將失敗。
這裏是我試過:
- 周圍使用標頭值(例如 '$ __ HDR')單引號。但是,傳遞給CURL的值是:
curl -v http://google.co.in -X GET -H 'x-madhurt-test:madh urt'
,它被視爲CURL,並且實際發送的頭是這樣的:'x-madhurt-test:madh
- 雙轉義標頭值(例如\\「$ __ hdr \\「),但這似乎也起作用。在這種情況下,CURL將「urt」作爲一個單獨的參數並將其視爲一個URL
curl: (6) Couldn't resolve host 'urt"'
- 轉義標題值中的空格(即使用「madh urt」而不是「madh urt」),但事實證明與選項2相同。
有人對此處發生了什麼問題有所瞭解嗎?
僅供參考:我使用eval來返回變量來自以下文章:http://www.linuxjournal.com/content/return- values-bash-functions – madhurtanwani 2010-07-06 15:23:35