我有一个用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文件中
答案 0 :(得分:2)
使用--argjson
选项代替参数插值。
jq --argjson dnb "$DOMAIN_NAME_BUILT" \
'.Origins.Items[0].DomainName = $dnb' distconfig.json > "$tmp" &&
mv "$tmp" distconfig.json
(您的直接问题是,参数扩展不会在单引号内发生,但是构建带有参数的静态过滤器比动态构建过滤器更安全。)