Linux环境中$PATH与${PATH:+:${PATH}}的差异及优势问询
第一种PATH添加方式的功能与优势
功能解析
第一种写法用了Shell的参数展开语法:${PATH:+:${PATH}},规则很直接:
- 如果
PATH变量已有内容(不为空),就把:${PATH}拼在前面的路径后面; - 如果
PATH是空的或者未定义,就什么都不拼接。
这条命令的实际效果分两种情况:
- 当
PATH本来就有内容时,和第二种写法export PATH=/usr/local/cuda/bin:$PATH完全一致,都是把/usr/local/cuda/bin加到PATH最前端; - 当
PATH为空时,只会把PATH设为/usr/local/cuda/bin,不会产生任何多余字符。
相比第二种的优势
第二种写法不管PATH有没有值,都会硬加:$PATH。如果刚好PATH是空的,最终PATH会变成/usr/local/cuda/bin:——结尾多了个冒号。
在Shell里,PATH中的冒号是路径分隔符,开头或结尾的冒号会被解释为当前工作目录。这相当于偷偷把当前目录加入了PATH,万一你在某个目录下遇到和系统命令重名的恶意脚本,Shell会优先执行这个脚本,存在安全隐患。
而第一种写法能完美避开这个问题:只有当PATH有值时才添加冒号和原有路径,空PATH时不会产生多余冒号,从根源上避免了意外引入当前目录的风险。
内容的提问来源于stack exchange,提问作者SKPS
相关产品推荐
相关产品推荐

