for 循环遍历序列,然后通过 json 创建字符串和 post
for loop over sequence, then make string and post via json
考虑这个简单的 bash 脚本:(我写 myurl
作为正确 URL 的占位符;而 myhost
作为正确主机名的占位符这里的隐私。)
for a in `seq 400 450`; do
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "$a"
}'
done
这被拒绝为错误的请求。我希望 seq
(例如数字 410)的输出是引号分隔的字符串。注意行 "file": "$a"
。如果我写 "file": "410"
,这非常有效,对于 400 到 450 之间的任何其他文件也是如此 - 只要它被 ""
引号包围。
问题:
我想要,在循环的每次迭代中,curl 请求应该包括来自 seq
命令的数字,并用 ""
包围。所以第一个电话应该是:
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "400"
}'
下一位:
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "401"
}'
等等。
我该怎么做?谢谢。
--data
部分用单引号引起来...
'{"devID": ... "file": "$a"}'
... 禁止在所述单引号内扩展变量引用。
考虑:
$ a=410
$ echo '"devID": "21010010", "file": "${a}"'
"devID": "21010010", "file": "${a}" # ${a} not expanded
您可以用双引号将 --data
部分括起来,但您还需要转义所有嵌套的双引号。
另一个想法是将 --data
部分分成用单引号括起来的 2x 部分,并将 ${a}
引用放在 2x 部分之间,例如:
$ echo '"devID": "21010010", "file": "'${a}'"' # change "${a}" to "'${a}'"
"devID": "21010010", "file": "410" # ${a} successfully expanded
注意:关于单引号和双引号的区别有几个帖子,例如this link
考虑这个简单的 bash 脚本:(我写 myurl
作为正确 URL 的占位符;而 myhost
作为正确主机名的占位符这里的隐私。)
for a in `seq 400 450`; do
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "$a"
}'
done
这被拒绝为错误的请求。我希望 seq
(例如数字 410)的输出是引号分隔的字符串。注意行 "file": "$a"
。如果我写 "file": "410"
,这非常有效,对于 400 到 450 之间的任何其他文件也是如此 - 只要它被 ""
引号包围。
问题:
我想要,在循环的每次迭代中,curl 请求应该包括来自 seq
命令的数字,并用 ""
包围。所以第一个电话应该是:
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "400"
}'
下一位:
curl --request POST \
--url myurl \
--header 'Content-Type: application/json' \
--header 'Host: myhost' \
--data '{
"devID": "21010010",
"count": 0,
"fileEnd": 1,
"line": "",
"file": "401"
}'
等等。
我该怎么做?谢谢。
--data
部分用单引号引起来...
'{"devID": ... "file": "$a"}'
... 禁止在所述单引号内扩展变量引用。
考虑:
$ a=410
$ echo '"devID": "21010010", "file": "${a}"'
"devID": "21010010", "file": "${a}" # ${a} not expanded
您可以用双引号将 --data
部分括起来,但您还需要转义所有嵌套的双引号。
另一个想法是将 --data
部分分成用单引号括起来的 2x 部分,并将 ${a}
引用放在 2x 部分之间,例如:
$ echo '"devID": "21010010", "file": "'${a}'"' # change "${a}" to "'${a}'"
"devID": "21010010", "file": "410" # ${a} successfully expanded
注意:关于单引号和双引号的区别有几个帖子,例如this link