curl 命令无法使用 shell 脚本通过获取用户输入动态调用它

curl 命令无法使用 shell 脚本通过获取用户输入动态调用它

我想要一个像下面这样的curl命令

curl --location --request POST 'https://abcd.com/api/v4/projects/<projectId>/triggers' \
--header 'PRIVATE-TOKEN: <your_access_token>' \
--form 'description="my description"'

现在我写了一个shell脚本函数来动态生成它

它需要projectId、token和description作为pramter

callApi(){
while IFS="," read -r -a users; do
for u in "${users[@]}"
do
url="'https://abcd.com/api/v4/projects/$1/triggers'"
echo $url

header="'PRIVATE-TOKEN: $2'"
echo $header

desc="'description=$u token'"
echo $desc

tk=$(curl --location --request POST $url \
--header $header \
--form $desc)

echo $tk

done
done <<< $(cat $3)
}


callApi "<projectId>" "<token>" ./users.csv

它完美地回显,但它会引发错误

答案1

查看已接受的答案我们如何运行存储在变量中的命令?

您面临这些问题的原因是分词,并且从变量扩展的引号并不充当引号,而只是普通字符。

在构建curl命令时,我通常遵循以下格式,将每个部分分配到一个数组中

    url_request=("https://abcd.com/api/v4/projects/$1/triggers")
    url_body=(--form "$desac")
    url_header=(--header "PRIVATE-TOKEN: $2")
    url+=("${url_request[@]}" "${url_body[@]}" "${url_header[@]}")

    response=$(curl -s "${url[@]}")

相关内容