带有变量的卷曲

带有变量的卷曲

以下仅输出一项。

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'

相关内容