使用参数将参数信息传递给 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,并且 shell 不会扩展单引号内的变量。

考虑一个简化的例子:

#!/bin/bash

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

如果我运行它,请注意我得到一个文字$1$2

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

您需要将这些变量放在单引号之外。一种选择如下(我还在变量周围添加了必要的引号文字:

#!/bin/bash

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

现在我得到:

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

相关内容