我正在写一个shell脚本,我必须检查是否设置了环境变量,如果没有设置,那么我必须设置它.有没有办法检查shell脚本,是否已经设置了环境变量?
Wil*_*ell 57
有条件地分配变量(无论是否在环境中)的标准解决方案是:
: ${VAR=foo}
Run Code Online (Sandbox Code Playgroud)
只有在未设置的情况下,才会将VAR设置为值"foo".
要将VAR设置为"foo"(如果未设置VAR或空字符串),请使用:
: ${VAR:=foo}
Run Code Online (Sandbox Code Playgroud)
要将VAR置于环境中,请按照以下步骤操作:
export VAR
Run Code Online (Sandbox Code Playgroud)
你也可以做export VAR=${VAR-foo}或export VAR=${VAR:=foo},但一些旧炮弹不支持分配和出口的语法在同一直线上.还有,DRY ; 使用=操作员两侧的名称是不必要的重复.(导出变量的第二行违反了相同的原则,但感觉更好.)
请注意,通常很难确定变量是否在环境中.解析输出env将无效.考虑:
export foo='
VAR=var-value'
env | grep VAR
Run Code Online (Sandbox Code Playgroud)
也不能产生子壳和测试:
sh -c 'echo $VAR'
Run Code Online (Sandbox Code Playgroud)
这将表明VAR在子shell中设置,这将是VAR在当前进程的环境中的指示符,但可能只是在子shell的初始化中设置VAR.但是,在功能上,结果与VAR在环境中的结果相同.幸运的是,您通常不关心VAR是否在环境中.如果你需要它,把它放在那里.如果你需要它,把它拿出来.
Igo*_*bin 28
[ -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
Run Code Online (Sandbox Code Playgroud)
我想强调这[ -z $VARIABLE ]还不够,因为你可以拥有,VARIABLE但它没有被导出.这意味着它根本不是环境变量.
Ben*_*y13 17
你想要做的是bash中的native,它被称为参数替换:
VARIABLE="${VARIABLE:=abc}"
Run Code Online (Sandbox Code Playgroud)
如果未设置VARIABLE,则右侧将等于abc.请注意,如果未设置VARIABLE或为空,:=则可以使用:-哪些测试替换内部运算符.
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Run Code Online (Sandbox Code Playgroud)
这将检查$ VARIABLE的长度是否为零.
| 归档时间: |
|
| 查看次数: |
75803 次 |
| 最近记录: |