由于单引号,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"
}
我想要一个像下面这样的 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"
}