如何使用curl或bash提交文件时替换环境变量
curl提交文件时自动替换内部环境变量的实现方法
首先需要修正你当前test.json的格式,原有写法会生成多余的单引号,调整为可被正常识别的变量格式:
{ "name": "$NAME_VAR" }
你可以通过以下两种常用方案实现提交时自动替换环境变量:
方案1:使用envsubst工具实现(推荐)
envsubst属于GNU gettext组件,绝大多数Linux发行版默认预装,macOS可通过brew install gettext安装。处理逻辑是先读取test.json替换变量,再将结果通过管道传给curl,命令如下:
# 先导出要替换的环境变量 export NAME_VAR="你要传入的实际名称" # 替换后提交 envsubst < test.json | curl -X POST -H 'Content-Type: application/json' --data-binary @- http://test-server/some/path
其中@-代表curl从标准输入读取提交的数据。如果需要只替换指定环境变量,避免误替换文件内其他$开头的内容,可以指定替换列表:
envsubst '$NAME_VAR$OTHER_VAR' < test.json | curl -X POST -H 'Content-Type: application/json' --data-binary @- http://test-server/some/path
方案2:使用Bash heredoc实现(无需额外工具)
不用单独维护test.json文件,直接把JSON内容写在curl命令的heredoc段中,Bash会自动完成变量替换:
export NAME_VAR="你要传入的实际名称" curl -X POST -H 'Content-Type: application/json' --data-binary @- http://test-server/some/path <<EOF { "name": "$NAME_VAR" } EOF
注意事项
- 变量使用前需要提前通过
export 变量名=值的方式导出,否则替换后对应位置会为空 - 如果变量值包含双引号、换行、斜杠等JSON特殊字符,需要先做转义处理,推荐用
jq工具自动转义:NAME_VAR=$(jq -Rs . <<< "包含特殊字符的原始值") - 替换完成后可先单独执行
envsubst < test.json查看替换后的JSON格式是否正确,再对接curl提交,避免格式错误导致请求失败
内容的提问来源于stack exchange,提问作者Thomas Freiling
相关产品推荐
相关产品推荐

