我将动态值传递给测试方法并执行curl请求。 $ PARAMETERS存在问题。
当我执行以下方法时,我收到如下错误
错误: -
curl: option -F: requires parameter
curl: try 'curl --help' or 'curl --manual' for more information
功能: -
testing() {
local URL=$1
local HTTP_TYPE=$2
local PARAMETERS=$3
# store the whole response with the status at the and
HTTP_RESPONSE=$(curl -w "HTTPSTATUS:%{http_code}" -X $HTTP_TYPE $URL $PARAMETERS)
echo $HTTP_RESPONSE
}
URL='https://google.com'
HTTP_TYPE='POST'
PARAMETERS="-F 'name=test' -F 'query=testing'"
result=$(testing $URL $HTTP_TYPE $PARAMETERS)
仅供参考,上面是一个示例方法,我正在使用shell脚本。请告诉我如何解决这个问题?
答案 0 :(得分:2)
由于你在第三个参数中传递了多个命令参数,所以shell会在你的函数中使用不带引号的变量时进行拆分。
您最好使用shell数组来存储PARAMETERS
参数。
将您的功能视为:
testing() {
local url="$1"
local httpType="$2"
shift 2 # shift 2 times to discard first 2 arguments
local params="$@" # store rest of them in a var
response=$(curl -s -w "HTTPSTATUS:%{http_code}" -X "$httpType" "$url" "$params")
echo "$response"
}
并将其命名为:
url='https://google.com'
httpType='POST'
params=(-F 'name=test' -F 'query=testing')
result=$(testing "$url" "$httpType" "${params[@]}")
此外,您应该避免在shell脚本中使用全封闭变量名称,以避免与env变量发生冲突。
如果您未使用bash
,还可以使用:
params="-F 'name=test' -F 'query=testing'"
result=$(testing "$url" "$httpType" "$params")