Вы не цитируете расширение $line
:
while IFS= read -r line ; do
curl -d '{"name": "'"$line"'"}' \
-H "Authorization: Basic YWRtaW46YWRtaW4=" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-X POST 'http://localhost:3000/api/teams'
done < /tmp/group.txt
Однако лучше дать инструменту, подобному jq
, создать JSON, чтобы гарантировать, что любые символы в $line
который должен быть экранирован для получения правильного JSON do, действительно, должен быть экранирован.
while IFS= read -r line; do
d=$(jq -n --argjson x "$line" '{name: $x}')
curl -d "$d" ...
done < /tmp/group.txt
Похоже, что JSON, который вы хотите создать, поместится в одну строку, так что вы также можете обработать все /tmp/group.txt
с помощью одного вызова jq
и передачи его вывода в ваш цикл.
jq -c -R '{name: .}' | while IFS= read -r line; do
curl -d "$line" ...
done