如果新定义非空,则重新定义变量

如果新定义非空,则重新定义变量

我有这个:

master="master";
integration="integration";

if [ -f '.vcs.json' ]; then
    master=`read_json -f .vcs.json -k git.master`
    integration=`read_json -f .vcs.json -k git.integration`
fi

但是,我只想在 read_json 的结果非空时重新定义主/集成变量。

我在想这样的事情:

master="master";
integration="integration";

if [ -f '.vcs.json' ]; then
    master="${`read_json -f .vcs.json -k git.master`:-master}"
    integration="${`read_json -f .vcs.json -k git.integration`:-integration}"
fi

但我不确定该语法是否正确。

答案1

如果您只想在字符串非空时执行操作,请在引用变量时使用参数默认值:

master="$(read_json -f .vcs.json -k git.master)"

如果子 shell 命令没有返回输出,则变量将为 null。然后您可以通过默认替换来利用它:

do-a-thing "${master-master}" # if 'master' is null, use the default value 'master'
                              # otherwise, use the contents of the variable

答案2

我会把逻辑颠倒过来:

# Note that the variables 'master' and 'integration' are NOT defined yet
if [ -f '.vcs.json' ]; then
  master="${`read_json -f .vcs.json -k git.master`:-master}"
  integration="${`read_json -f .vcs.json -k git.integration`:-integration}"
fi
# Set default values if empty or missing
: ${master:=master} ${integration:=integration}
# They are now guaranteed to be non-empty
echo $master $integration

相关内容