bash整数的变量插值

huangapple go评论61阅读模式
英文:

bash variable interpolation with an integer

问题

我正在尝试使用curl提交一个需要其中一个参数为整数的请求。我想要能够使用一个变量来表示这个整数,但是无法弄清楚如何做到这一点,而不使其显示为字符串或无法替换变量。

stringVar="L"
intVar=4

JSON=\'{ "stringVar": "'"$stringVar"'", "intVar": "'"$intVar"'" }\'

printf '%s\n' "$JSON"

我已经尝试了所有我能想到的引号、不引号和大括号的组合,但无法弄清楚。

英文:

I am trying to use curl to submit a request that requires one of the parameters to be an integer. I want to be able to use a variable for that integer, but can't figure out how to do it without it showing up as a string or failing to substitute the variable in.

stringVar="L"
intVar=4

JSON=\''{"stringVar": "'"$stringVar"'","intVar": "'"$intVar"'" }'\'


printf '%s\n' "$JSON"

I have tried all the combinations I can think of of quotes no quotes and braces and can't figure it out.

答案1

得分: 2

不要使用字符串拼接生成JSON。除非由符合规范的生成器生成,否则不能保证生成的结果是有效的JSON(任何合规的解析器都会接受)。对于bash,用于这两个目的之一的最广泛可用的工具之一是 jq

# 从问题中获取
stringVar="L"; intVar=4

json=$(jq -n \
          --arg stringVar "$stringVar" \
          --arg intVar "$intVar" \
          '{"stringVar": $stringVar, "intVar": $intVar | tonumber}')
英文:

Do not ever generate JSON with string concatenation. The result is not guaranteed to be valid JSON (which any and every compliant parser will accept) unless it's generated by a compliant generator. For bash, one of the most widely-available tools for both purposes is jq:

# taken from the question
stringVar="L"; intVar=4

json=$(jq -n \
          --arg stringVar "$stringVar" \
          --arg intVar "$intVar" \
          '{"stringVar": $stringVar, "intVar": $intVar | tonumber}')

huangapple
  • 本文由 发表于 2020年1月7日 02:33:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/59617200.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定