如何将jq与变量连接?

时间:2019-04-20 20:34:27

标签: json bash shell jq

我有一个用jq读取的json对象,并试图用局部变量编写一些属性。

我在shell脚本中设置局部变量,如下所示:

LOCATION_NAME="stag5"
DOMAIN_LOCATION="example.io"

然后我要构建以下变量:


echo "Build New ID"

DOMAIN_NAME_BUILT="$LOCATION_NAME.$DOMAIN_LOCATION.s3-website.us-east-2.amazonaws.com"


我正在尝试读取我的distconfig.json文件,并使用上述变量设置属性。

tmp=$(mktemp)
jq '.Origins.Items[0].DomainName = "$DOMAIN_NAME_BUILT"' distconfig.json > "$tmp" && mv "$tmp" distconfig.json

该命令正在运行,但是它将变量作为字符串传递给我的新json文件。 因此,当我在新创建的json文件中查看属性时,该属性将另存为"$DOMAIN_NAME_BUILT"而不是stag5.example.io.s3-website.us-east-2.amazonaws.com

如何代替传递字符串,而是传递$ DOMAIN_NAME_BUILT的变量并将其写入新的json文件中

1 个答案:

答案 0 :(得分:2)

使用--argjson选项代替参数插值。

jq --argjson dnb "$DOMAIN_NAME_BUILT" \
    '.Origins.Items[0].DomainName = $dnb' distconfig.json > "$tmp" &&
  mv "$tmp" distconfig.json

(您的直接问题是,参数扩展不会在单引号内发生,但是构建带有参数的静态过滤器比动态构建过滤器更安全。)