我正在编写一个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
但它不是出口。这意味着它根本不是一个环境变量。
这个工作在所有的shell环境中吗? – Mojoy 2012-07-27 11:00:39
@ Senthilnathan:是的,当然,唯一可以重写的代码就是'grep -q'。人们可以编写'env |而不是使用grep^VARIABLE =>/dev/null。 – 2012-07-27 11:02:20
如果我导出一个变量,然后将该变量设置为别的东西而不导出它,最终我的非导出变量和我的导出变量之间是否不匹配,还是会自动更新导出的变量? – ArtOfWarfare 2015-09-11 11:29:00
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
这会检查$ VARIABLE的长度是否为零。
你想要做的是在bash本地,它被称为参数替换:
VARIABLE="${VARIABLE:=abc}"
如果没有设置变量,右边将等于ABC。请注意,内部操作符:=可能替换为: - 测试VARIABLE是否未设置或为空。
正是我在找的东西。如果TEST_DATABASE_NAME尚未定义,那么'export TEST_DATABASE_NAME =“$ {TEST_DATABASE_NAME:= prodlike}”行只会将prodlike用作默认值。没有凌乱的条件块。全部在一行代码中。 – 2017-04-15 05:41:46
的标准溶液,以有条件地分配可变(无论是在环境或不)是:
: ${VAR=foo}
,将设置VAR为值“foo”的仅当它是未设置。
要设置VAR为“富”如果VAR没有设置或者为空字符串,使用:
: ${VAR:=foo}
为了把VAR的环境中,跟进:
export VAR
你也可以做export VAR=${VAR-foo}
或export VAR=${VAR:=foo}
,但一些较旧的shell不支持在同一行中分配和导出的语法。另外,DRY;使用=
运营商两侧的名称是不必要的重复。 (导出变量的第二行违反了同一个主体,但感觉更好。)
请注意,确定变量是否在环境中通常非常困难。解析env
的输出将不起作用。试想一下:
export foo='
VAR=var-value'
env | grep VAR
它也没有工作产卵子shell和测试:
sh -c 'echo $VAR'
将表明VAR被设置在子shell,这将是一个指标,VAR是环境当前进程,但可能只是在子shell的初始化中设置了VAR。然而,在功能上,结果与VAR在环境中相同。幸运的是,您通常不关心VAR是否在环境中。如果你需要它,把它放在那里。如果你需要它,拿出来。
您可以添加一个关于':$ {VAR:= foo}'符号如何在内部工作的解释吗?我总是觉得它是解决方案,但从来没有如何实际工作。 – 2014-01-13 18:03:59
我在[StackOverflow](http://stackoverflow.com/questions/4437573/bash-assign-default-value)上找到了一些解释! – 2014-01-13 18:09:33
- 1. 如何检查环境变量是否已设置?
- 2. 检查GET变量是否已设置
- 3. 如何检查是否在cmake中设置了环境变量
- 4. 如何检查PHP中是否设置了环境变量?
- 5. Perl:检查环境变量是否设置
- 6. 检查环境变量是否存在并设置为True
- 7. 检查Ant脚本中是否设置了环境变量
- 8. Powershell检查什么环境变量已经改变
- 9. 检查一个变量是否已设置,值是ksh
- 10. 如何检查环境变量是否在节点js中设置?
- 11. 检查环境变量
- 12. TCL检查环境变量
- 13. 检查环境变量
- 14. 检查变量是否设置
- 15. PHP检查变量是否设置
- 16. 检查变量是否设置为NO_VALUE
- 17. VBA如何检查变量是否已设置?
- 18. 如何检查会话变量是否已设置?
- 19. 如何在PHP中检查变量是否已设置且is_null
- 20. 在Activiti中,如何检查变量是否已设置?
- 21. 设置环境变量
- 22. 设置Maven环境变量
- 23. 设置Java环境变量?
- 24. 设置apache环境变量
- 25. 设置环境变量
- 26. DrJava设置环境变量
- 27. C设置环境变量
- 28. 设置环境变量
- 29. C#设置环境变量
- 30. 设置环境变量(kubernetes)
实际上,这不是这个问题的真正重复:这里的OP想知道是否设置了一个变量,并且如果不是这样做,而不是退出脚本。 $ {V:?}在这种情况下不是有效的答案。 'set | grep -q'^ V =''是。这测试了变量的存在并且即使设置了变量但对空字符串也起作用。 – Coroos 2015-11-14 20:24:53