我想发送这样的请求curl:
curl some parameters and headers --data-binary '{"secret":"$1"}'
Run Code Online (Sandbox Code Playgroud)
但$1不是可变的。我尝试使用echo这个命令:
echo '{"asd":"$1"}' dhkdgb
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出:
{"asd":"$1"} dhkdgb
Run Code Online (Sandbox Code Playgroud)
但是,我想得到这个输出:
{"asd":"dhkdgb"}
Run Code Online (Sandbox Code Playgroud)
根据curl要求,我想发送以下内容:
curl some parameters and headers --data-binary '{"secret":"argv 0 of script"}'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
ste*_*ver 11
有几种方法可以做到这一点。给定
$ set -- 'foo bar'
Run Code Online (Sandbox Code Playgroud)
(为 shell 的第一个位置参数赋值foo bar,就像在像这样调用的脚本中一样myscript "foo bar")然后例如
$ echo '{"asd:":"'"$1"'"}'
{"asd:":"foo bar"}
Run Code Online (Sandbox Code Playgroud)
或者
$ echo {\"asd:\":\""$1"\"}
{"asd:":"foo bar"}
Run Code Online (Sandbox Code Playgroud)
但是,您可能会发现使用 shell 的printf内置函数来创建可以分配给新变量的格式化字符串会更清晰:
$ printf -v data '{"asd": "%s"}' "$1"
$ echo "$data"
{"asd": "foo bar"}
Run Code Online (Sandbox Code Playgroud)
然后您可以将其用作
curl some parameters and headers --data-binary "$data"
Run Code Online (Sandbox Code Playgroud)
或者,由于您似乎正在尝试将 JSON 对象传递给curl 命令,因此您可以考虑使用jq代替printf:
$ jq -nc --arg x "$1" '{asd: $x}'
{"asd":"foo bar"}
Run Code Online (Sandbox Code Playgroud)
或类似地使用内置$ARGS数组
$ jq -nc --arg asd "$1" '$ARGS.named'
{"asd":"foo bar"}
Run Code Online (Sandbox Code Playgroud)
如果您想将名称和值都传递给构造函数。
| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |