我正在编写一个bash脚本,它需要检查环境变量是否存在,如果尚未设置该变量,则将其设置为运行脚本的父目录。如果它已经设置,它应该什么都不做。这样做的最佳方式是什么?
答案 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回答的更具可读性)