Curl
帶變數的捲曲
以下僅輸出一項。
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'