使用jq时如何将传入的命名参数与固定字符串拼接
问题根源
你遇到的问题是因为jq的双引号字符串默认不会解析$开头的变量引用,只有直接作为JSON值的变量才会被识别。你把$hostname写在双引号内部时,jq会将其视为普通字符串片段,而不会读取你传入的参数值。
正确实现方式
方法1:使用+运算符拼接字符串
jq支持直接用+拼接字符串类型的字面量和变量,写法如下:
var=$(jq -n --arg hostname "my-hostname" '{ Name: "prefix-value-" + $hostname }') echo $var
运行后输出即为你预期的结果:
{ "Name": "prefix-value-my-hostname" }
方法2:使用字符串插值语法
如果你希望直接把变量嵌入到字符串内部,可以用jq提供的\(表达式)插值语法,包裹需要解析的变量即可:
var=$(jq -n --arg hostname "my-hostname" '{ Name: "prefix-value-\($hostname)" }') echo $var
两种写法的运行效果完全一致,你可以根据场景选择更易读的写法。
内容的提问来源于stack exchange,提问作者alvgarvilla
相关产品推荐
相关产品推荐

