Bash

使用參數將參數資訊傳遞給 cURL 腳本

  • June 3, 2020

我正在嘗試編寫一個腳本,使用者可以在執行腳本時通過參數傳遞 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 and $ 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"}

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