由于单引号,curl 命令无法动态形成

curl command can not be formed dynamically due to single quote

我想要一个像下面这样的 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 作为参数

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

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

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

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

echo $tk

done
done <<< $(cat )
}


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

完美呼应 但 它引发错误

不要像那样同时使用双引号和单引号。您正在向 url (和其他变量)添加文字单引号,正如您所发现的那样,它会中断。

如果需要允许命令或参数替换,请使用双引号,否则使用单引号。在你取消引用它们的任何地方双引号你的变量。

使用缩进提高可读性。

无用cat

为了可见性,我在函数开头捕获了函数参数:我什至没有注意到 URL 中埋藏的 </code>。</p> <pre><code>callApi() { local project= token= userfile= while IFS="," read -r -a users; do for u in "${users[@]}"; do url="https://abcd.com/api/v4/projects/${project}/triggers" echo "$url" header="PRIVATE-TOKEN: ${token}" echo "$header" desc="description=$u token" echo "$desc" tk=$( curl --location \ --request POST \ --header "$header" \ --form "$desc" \ "$url" ) echo "$tk" done done < "$userfile" }