如何在 shell 脚本中即时解释变量?

Bre*_*tis 2 unix bash shell json jq

我正在使用 JQ 在 shell 脚本中读取 JSON。在这里,我无法动态解释 shell 脚本中的变量 $HOME、$HOST、$PEMFILE。

JSON 文件:

{
    "script": {
    "install": "${HOME}/lib/install.sh $HOST $PEMFILE",
    "Setup": "${HOME}/lib/setup.sh $HOST $PEMFILE $VAR1 $VAR2"
    }

}
Run Code Online (Sandbox Code Playgroud)

外壳脚本:

#!/bin/bash
examplefile="../lib/example.json"
HOST=ec2-..-...-...-...us-west-2.compute.amazonaws.com
PEMFILE=${HOME}/test.pem

installScript=($(jq '.script.install' $examplefile))
bash "$installScript"
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在不修改 JSON 的情况下即时解释这些变量?

PS我不想使用eval。

anu*_*ava 6

使用 gnu 实用程序很容易envsubst

installScript=$(jq -r '.script.install' "$examplefile" | envsubst)
Run Code Online (Sandbox Code Playgroud)

  • 这是目前我+1 的两种方法之一。也就是说,回想起来,我不确定是否应该在没有警告的情况下推荐它 - 在将结果解析为 shell 命令之前用代码替换变量肯定比让 shell 更不安全自行更换。 (2认同)