如果我是正确的,进程的环境是一个字符串数组。字符串通常具有“名称=值”的形式,但不一定。我想知道字符串没有“名称=值”形式的目的是什么?谢谢。
答案1
我不知道任何实际使用或期望不包含=
.这些通常是病态病例。
GNUenv
或printenv
将忠实地打印它们。
对于某些语言,这些字符串将是遥不可及的。例如,如果您perl
使用foo
env 字符串进行调用,它不会显示在 中keys(%ENV)
,但perl
仍会将其传递给它执行的命令(除非您重置整个%ENV
哈希)。
因此,人们可能会使用它来绕过某些环境清理(尽管正确的环境清理应该从空环境开始)。
某些工具(如某些 shell)将它们从接收到的环境中剥离出来,并且不会将它们传递给它们执行的命令,因此一般来说依赖它并不是一个好主意。
除了=
-less env 字符串之外,其他病态情况还包括具有重复变量名的 env 字符串(例如 Bothfoo=good
和foo=bad
传入的envp
),这已被视为导致漏洞(例如CVE-2016-2381) 和 env 字符串,如=foo
(空变量名;注意 POSIX putenv()
/getenv()
可以设置/获取该变量,但不能setenv()
)。