我想运行以下命令:
curl -X PUT $URL -H "accept: */*" -H "Content-Type: application/json" -d '{"payload": $(base64 /some/path)`}'
我在 ESLinux 环境 (tcsh) 中运行该命令时遇到问题,因为它无法执行$(base64 /some/path)
.得到Illegal variable name
这个是有道理的,因为使用这种语法的是 bash 而不是 tcsh。我怎样才能执行它?尝试使用反引号但没有成功。
答案1
反引号应该有效。请注意,您需要更多双引号字符才能使 json 语法正确
curl -X PUT $URL -H "accept: */*" -H "Content-Type: application/json" -d '{"payload": "'`base64 /some/path`'"}'
-d参数由3部分组成
'{"payload": "'
`base64 /some/path`
'"}'
第一个和第三个使用单引号,因此其中的所有内容都会被保留,包括双引号。特别是 -d 参数的最终值将类似于{ "payload": "af5143676d6d6d6a bcdefc8844"}
十六进制字符串周围带有双引号,并且嵌入的空格替换了 base64 输出中的换行符。远端可能不喜欢这些空格。