使用提供的变量;否则派生并使用

使用提供的变量;否则派生并使用

尝试使用脚本实现以下目标,但没有成功

如果提供了变量值,则将其用于进一步的步骤,否则导出执行写入文件的脚本的值并将其用于进一步的步骤

#!/bin/bash
if [[ -z "$VER" ]] then
echo "VER not provided; Deriving value from INT"
./get_ver.rb > VER      
endif
echo "VER=$VER" > VER

答案1

一些常见的习惯用法(在任何 POSIX shell 中,而不仅仅是,因此在脚本中也bash可以安全使用):sh

VER=${VER-$(./get_ver.rb)}

或者:

: "${VER=$(./get_ver.rb)}"

${VER-value}$VER扩展为if已设置的内容$VER(甚至扩展为空值),否则扩展为value其他内容。

${VER=value}:相同,但value也分配给先前未设置的$VER条件。$VER

请注意,您[[ -z $VER ]]检查的是内容是否$VER为空,而不是是否$VER已设置。如果$VER设置了,但是为空值,它仍然会返回true。您可以[ -z "${VER+yes}" ](这里使用[标准命令而不是[[...]]Korn 构造,尽管您也可以使用[[...]])来检查是否$VER已设置。另一种不太明显的方法是使用${VER+:} false.

答案2

您的脚本包含多个语法错误。

这是一个固定版本:

#!/bin/bash
if [[ -z "$VER" ]]; then
  echo "VER not provided; Deriving value from INT"
  VER="$( ./get_ver.rb )"
fi
echo "VER=$VER" >VER

请注意- 语句;之前thenfi结束if

要将命令的输出存储在变量中,请$(...)按上述方式使用。

使用外壳检查检查你的 shell 脚本。

相关内容