以下仅输出一项。
SEARCH_URL="http://91.132.145.114/json/stations/search"
curl -X POST -d 'tag=jazz' -d 'language=english' -d 'state=queensland' "$SEARCH_URL"
但是当我在变量中拥有确切的值时,它的输出会有所不同。看起来它忽略-d
并输出了很多。
SEARCH_URL="http://91.132.145.114/json/stations/search"
# parse options and store them in OPTS
# OPTS is something like this.
OPTS="-d 'tag=jazz' -d 'language=english' -d 'state=queensland'"
curl -X POST "$OPTS" "$SEARCH_URL"
我怎样才能让它发挥作用?为什么它不起作用?
答案1
双引号"$OPTS"
可以防止变量的内容在空白处被分割,因此它被视为一卷曲的参数。换句话说,它与运行相同:
curl -X POST "-d 'tag=jazz' -d 'language=english' -d 'state=queensland'" "$SEARCH_URL"
请改用数组。例如:
SEARCH_URL="http://91.132.145.114/json/stations/search"
OPTS=(-d 'tag=jazz' -d 'language=english' -d 'state=queensland')
curl -X POST "${OPTS[@]}" "$SEARCH_URL"
这会导致每个元素OPTS 数组的值将被插入到curl
命令行中,就像它是一个单独的带引号的字符串一样 - 如果元素包含空白字符等,这尤其有用。
顺便说一句,在解析选项时,您可以将新元素添加到数组中,例如:
OPTS+=(newoption)
或者
OPTS+=(-d 'foo=bar') # add two new elements: '-d' and 'foo=bar'