我试图在curl
POST方法中传递带空格的值。我通过txt文件指导值。 POST命令不允许我使用for while循环传递带空格的值,但是当我在没有while循环的情况下传递它时,它接受该值而没有任何错误。
以下是命令
这完全没问题
curl -d '{"name": "equity calculation support", "email": "[email protected]"}' -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:3000/api/teams
{"message":"Team created","teamId":103}
当使用while循环和IFS时,它不会使用带空格的值:
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
group.txt文件包含值。
你没有引用$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的任何字符确实会被转义。
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