如何检查环境变量是否已设置但是确实存在?

时间:2018-03-22 07:36:14

标签: bash environment-variables

我有一个脚本,必须检查环境变量FILE是否已设置,以及它的路径是否确实存在。这就是我到目前为止用Google搜索的内容:

if env | grep -q ^FILE=
then
   echo env variable is already exported
else
   echo env variable was not exported
   exit 1
fi

如果变量设置正确,哪个有效,但如果路径不存在,则在第一个if语句中遇到错误。我该如何修改语句以检查它?我的任务是创建路径,如果它不存在于脚本中。

2 个答案:

答案 0 :(得分:2)

由于我们正在编写shell代码,因此环境变量只是普通变量。

if [ -f "$FILE" ]; then
    echo env variable is already exported
else
    echo env variable was not exported
fi

我不明白为什么在FILE未使用上述代码导出时会出现错误,但是如果你要这样测试:if [ -f $FILE ](即没有引号)如果未设置FILE,您将遇到错误。

答案 1 :(得分:2)

环境变量的不同之处在于它们位于环境块中,但除此之外,您可以将它们与bash中的任何其他变量一样使用。对于所有shell都不是这样,csh / tcsh(C-shell)对它们的处理方式不同。

有检查变量是否存在的测试(如果使用[[则不需要引号):

[[ -z $FILE ]] && echo '$FILE empty'
[[ -n $FILE ]] || echo '$FILE empty'

来自bash 4:

[[ -v $FILE ]] || echo '$FILE not set'

顺便说一句,小心使用大写变量名称,它们可能会与shell使用的名称冲突。