如果尚未设置,则将环境变量设置为父目录

时间:2017-08-04 17:22:24

标签: linux bash environment-variables

我正在编写一个bash脚本,它需要检查环境变量是否存在,如果尚未设置该变量,则将其设置为运行脚本的父目录。如果它已经设置,它应该什么都不做。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

有两个部分。首先,当前工作目录的父级只是$PWD/..。其次,如果变量尚未使用

设置,则可以为变量赋值
: ${MYVAR:=$PWD/..}

第一个:是do-nothing命令,但仍会评估其参数。参数扩展运算符:=具有将MYVAR设置为给定值的副作用(如果尚未设置)。

答案 1 :(得分:0)

三件事:

环境变量是全局可用的,在程序及其子程序中。 shell变量仅在当前shell中可用。您询问是否存在 environment 变量。你确定这是你想要的吗?在这种情况下,您可能想要做一个

if set | grep ^variable_name= > /dev/null ; then
   #set the variable
fi

请注意,这只是检查变量是否存在。如果您在脚本中很早就完成了,那么您几乎可以肯定该变量确实是一个环境变量。但是,您是否真的关心它是否是特定于本地shell或环境变量的变量?

其次,你是否关心变量是否存在?或者你只是想让它包含父目录的值?您是否需要上面示例中的set | grep,或者是否足以测试[ "$variable" != "" ]? ,如

if [ "$variable" = "" ] ; then
    # set the value to the parent-dir
fi

第三,父母dir通常为dirname $PWD$PWD/..也是父级目录。

因此,如果您不关心它是否是环境变量,并且如果您只是希望它包含实际目录,则代码将类似于:

if [ "$variable" = "" ] ; then
    variable=$(dirname "$PWD")
fi

(这可能是Chepner回答的更具可读性)