Я хочу иметь команду curl, как показано ниже
curl --location --request POST 'https://abcd.com/api/v4/projects/<projectId>/triggers' \
--header 'PRIVATE-TOKEN: <your_access_token>' \
--form 'description = "my description"'
Теперь я написал функцию сценария оболочки для ее динамической генерации.
ему нужен projectId, токен и описание в качестве прамтера
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
Это эхо идеально Но Выдает ошибку
Не используйте как двойные, так и одинарные кавычки. Вы добавляете буквальные одинарные кавычки к URL-адресу (и другим переменным), которые, как вы обнаружили, ломаются.
Используйте двойные кавычки, если вам нужно разрешить подстановку команды или параметра, в противном случае используйте одинарные кавычки. Двойные кавычки ваших переменных везде, где вы их разыменовываете.
Используйте отступы для удобства чтения.
Бесполезное использование cat
.
Я зафиксировал параметры функции в начале функции для наглядности: я даже не заметил $1
, спрятанный в URL-адресе.
callApi() {
local project=$1 token=$2 userfile=$3
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"
}
его предстоящий выходной URL: https://abcd.com/api/v4/projects/$1/triggers
Не может обнаружить $1, когда я вызываю функцию apiCall "2222" "token1" ./users.csv
О, я не заметил там переменную. Это требует двойных кавычек. я обновлю
Какова цель tk
здесь? Можно просто позволить curl записывать свой вывод прямо в стандартный вывод, и за исключением того, что эта переменная не останется после выполнения функции, поведение будет идентичным.