这个问题已经在这里有一个答案:
- 什么是检查变量在Unix shell脚本设置环境简洁的方式? 14个回答
我写一个shell脚本,在这里我要检查,如果环境变量设置,如果没有设置那么我必须设置它。 有没有什么办法来检查的shell脚本,无论是环境变量已设置呢?
这个问题已经在这里有一个答案:
我写一个shell脚本,在这里我要检查,如果环境变量设置,如果没有设置那么我必须设置它。 有没有什么办法来检查的shell脚本,无论是环境变量已设置呢?
[ -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
,但它并没有出口。 这意味着,它不是一个环境变量在所有。
标准溶液以有条件地分配可变(无论是在环境或不)为:
: ${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是环境还是不行。 如果你需要它在那里,把它放在那里。 如果你需要它,把它拿出来。
你想要做的是在bash本地,它被称为参数替换:
VARIABLE="${VARIABLE:=abc}"
如果没有设置变量,右边将等于ABC。 请注意,内部操作员:=
可以被替换为:-
如果变量没有设置或空在那里测试。
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
此检查,如果$变量的长度为零。