Curl

帶變數的捲曲

  • July 4, 2021

以下僅輸出一項。

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"

我怎樣才能讓它工作?為什麼它不起作用?

周圍的雙引號"$OPTS"防止變數的內容在空白處被拆分,因此它被視為curl的**一個參數。**換句話說,它與執行相同:

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'

引用自:https://unix.stackexchange.com/questions/656916