6

该站点http://www.tldp.org/LDP/abs/html/gotchas.html#PARCHILDPROBREF表明脚本无法更改其父级的环境变量。

因此,(除非脚本是来源的)脚本不能意外更改其父环境中巧合命名的环境变量。

但是,如果程序依赖于它声明的环境变量,则可能会发生命名空间冲突。

例如,假设我不知道 vim 使用环境变量名称“VIMRUNTIME”。而且,巧合的是,我碰巧将该环境变量名称用于我自己的、不相关的目的。然后 vim 会从 VIMRUNTIME 环境变量中获取垃圾。

是否有任何机制或标准的、众所周知的命名约定来避免这种类型的命名空间冲突?当然,我可以做一些事情,比如用某种前缀命名我所有的环境变量。但我想知道是否有任何众所周知的正式标准。或者,我还没有找到 Bash 中的某种命名空间机制吗?鼓励在评论中提出有关其他相关问题的建议。

4

2 回答 2

5

除了使用通用前缀之外,我认为没有任何标准机制。例如,ssh用于SSH_xxx其所有环境变量。不幸的是,许多遗留程序(例如 shell)不遵循任何约定。并且在许多不同程序中使用的变量(例如TERM, PAGER)没有可用作前缀的程序名称。

如果遵循前缀样式,碰撞的机会就会很小。这是你能做的最好的。

于 2013-06-26T20:50:13.527 回答
1

不要导出它。shell变量和环境变量是有区别的。

于 2013-06-29T13:06:27.867 回答