英文:
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}')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论