パラメータを使用してcURLスクリプトにパラメータ情報を渡す

パラメータを使用してcURLスクリプトにパラメータ情報を渡す

スクリプトを実行するときに、ユーザーがstartDateとendDateをパラメータとして渡すことができるスクリプトを作成しようとしています。私のスクリプトは次のようになります(test.shとして保存)。

VAR="$(curl -f -X POST -H 'X-API-TOKEN: XXXXXX' -H 'Content-Type: application/json' -d '{"format": "csv", "startDate": $1, "endDate": $2}' 'https://xxx.qualtrics.com/export-responses' | sed -E -n 's/.*([^"]+).+/\1/p')"
echo $VAR

スクリプトを実行するときは、次のように入力します。

~/test.sh '"2020-05-13T17:11:00Z","2020-05-13T20:32:00Z"'

スクリプトでエラーが発生します。

答え1

一重引用符の中に$ 1と$ 2を使用すると、シェルは一重引用符内の変数を拡張しません。

単純化された例を考えてみましょう。

#!/bin/bash

VAR="$(echo '{"format": "csv", "startDate": $1, "endDate": $2}')"
echo $VAR

これを実行すると、リテラルの$1合計が得られます$2

$ ./example hi ho
{"format": "csv", "startDate": $1, "endDate": $2}

これらの変数は一重引用符の外に置く必要があります。 1つのオプションは次のとおりです(変数の周りに必要な引用テキストも追加しました。

#!/bin/bash

VAR="$(echo "{\"format\": \"csv\", \"startDate\": \"$1\", \"endDate\": \"$2\"}")"
echo $VAR

今私は次を得ます:

$ ./example hi ho
{"format": "csv", "startDate": "hi", "endDate": "ho"}

関連情報