変数によるカーリング

変数によるカーリング

以下には1つの項目のみが出力されます。

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'

おすすめ記事