我正在编写一个bash脚本,它需要检查环境变量是否存在,并将其设置为运行脚本的父目录,如果变量isn已经设置好了。如果它已经设置,它应该什么也不做。这样做的最好方法是什么?设置环境变量为父目录(如果尚未设置)
回答
有两部分。首先,当前工作目录的父目录只是$PWD/..
。其次,你可以,如果它尚未与
: ${MYVAR:=$PWD/..}
第一:
是什么也不做的指令集,但它的参数仍评估值赋给变量。参数展开运算符:=
具有将MYVAR
设置为给定值(如果尚未设置)的副作用。
三件事:
环境变量是全球可用的,在程序和它的子程序。 shell变量仅在当前shell中可用。您询问是否存在环境变量。你确定这是你想要的吗?在这种情况下,你可能想要做一个
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
三,父目录一般是dirname $PWD
。 $PWD/..
也是父目录。
所以,如果你不在乎它是否是一个环境变量或没有,如果你只是希望它包含一个实际的目录,代码将是这样的:
if [ "$variable" = "" ] ; then
variable=$(dirname "$PWD")
fi
(这是也许更可读Chepner的答案)
清除'set'的输出并不可靠。另一个变量的值可能包含您在换行符后检查的字符串。假设你有'foo = $'bar \ nbaz ='';当你的支票真的只是'foo'的值的一部分时,你会看到'baz'是一个名字。 – chepner
- 1. 如何将R_HOME环境变量设置为R主目录?
- 2. 如何为Jython设置环境变量?
- 3. 如何为python设置环境变量
- 4. 如何为PHP设置环境变量?
- 5. AWS ECS未设置环境变量
- 6. TERM环境变量未设置
- 7. ASP.NET核心环境变量未设置
- 8. 未设置.bashrc中的环境变量
- 9. 意外的环境变量未设置
- 10. Worklight.home环境变量未设置
- 11. Centos:TERM环境变量未设置
- 12. unix“clear”TERM环境变量未设置
- 13. 警告:环境变量SUMO_HOME未设置
- 14. eclipse“TERM环境变量未设置”
- 15. ANDROID_HOME环境变量未设置错误
- 16. 环境变量未全局设置
- 17. Node.js未设置的环境变量
- 18. docker-compose未设置环境变量
- 19. 设置环境变量
- 20. 设置Maven环境变量
- 21. 设置Java环境变量?
- 22. 设置apache环境变量
- 23. 设置环境变量
- 24. DrJava设置环境变量
- 25. C设置环境变量
- 26. 设置环境变量
- 27. C#设置环境变量
- 28. 设置环境变量(kubernetes)
- 29. 设置环境变量Windows
- 30. htaccess设置环境变量
为什么不使用'$ {MYVAR:= $ {PWD%/ *}}'? –
你可能会在这里。但是,一般来说,删除最后一个'/'及其后面的所有内容并不一定会删除最后一个路径组件。考虑一个具有尾部'/'的路径,例如'/ home/me /'。你的建议会产生'/ home/me'。 – chepner
':$ {MYVAR:= $(dirname“$ PWD”)}',正如@LjmDullaart指出的那样,将是另一种选择;我想避免在可能的情况下运行其他进程。 – chepner