检查环境变量已设置为[副本](check if environment variable is al

2019-07-30 16:14发布

这个问题已经在这里有一个答案:

  • 什么是检查变量在Unix shell脚本设置环境简洁的方式? 14个回答

我写一个shell脚本,在这里我要检查,如果环境变量设置,如果没有设置那么我必须设置它。 有没有什么办法来检查的shell脚本,无论是环境变量已设置呢?

Answer 1:

[ -z "$VARIABLE" ] && VARIABLE="abc"

if env | grep -q ^VARIABLE=
then
  echo env variable is already exported
else
  echo env variable was not exported, but now it is
  export VARIABLE
fi

我想强调的是[ -z $VARIABLE ]是不够的,因为你可以有VARIABLE ,但它并没有出口。 这意味着,它不是一个环境变量在所有。



Answer 2:

标准溶液以有条件地分配可变(无论是在环境或不)为:

: ${VAR=foo}

这将设定VAR值“富”,只有当它是未设置。
要设置VAR为“富”如果VAR没有设置或者为空字符串,使用:

: ${VAR:=foo}

为了把VAR的环境中,跟进:

export VAR

你也可以做export VAR=${VAR-foo}export VAR=${VAR:=foo}但一些旧炮弹不支持分配和出口的语法在同一直线上。 此外, DRY ; 使用上的两侧的名称=操作是不必要的重复。 (第二行导出变量违反相同的主要,但感觉更好。)

需要注意的是,一般很难确定一个变量是环境。 解析输出env将无法正常工作。 考虑:

export foo='
VAR=var-value'
env | grep VAR

它也没有工作产卵子shell和测试:

sh -c 'echo $VAR'

这将表明VAR在子shell,这将是一个指标,VAR是当前进程的环境设置,但它可能仅仅是VAR在子shell的初始化设置。 在功能上,然而,结果是一样的,如果VAR是环境。 幸运的是,你通常不关心,如果VAR是环境还是不行。 如果你需要它在那里,把它放在那里。 如果你需要它,把它拿出来。



Answer 3:

你想要做的是在bash本地,它被称为参数替换:

VARIABLE="${VARIABLE:=abc}"

如果没有设置变量,右边将等于ABC。 请注意,内部操作员:=可以被替换为:-如果变量没有设置或空在那里测试。



Answer 4:

if [ -z "$VARIABLE" ]; then
    VARIABLE=...
fi

此检查,如果$变量的长度为零。



文章来源: check if environment variable is already set [duplicate]
标签: linux shell unix