(my_virtualenv)my_pc:~/path$ ASDF='asdf' python
...
>>> import os
>>> os.environ['ASDF']
'asdf'
那么这是如何工作的?为什么解释器不会查找ASDF
命令,如果找不到则报告错误?
答案 0 :(得分:3)
因为前导var=value
对被识别为特定于命令的环境变量名称,作为与POSIX sh兼容的shell标准的一部分。
来自Shell Command Language规范的2.10.2 ("Shell Grammar Rules"):
7.
[指定名称前的作业]
7.a.
[当第一个单词时]如果TOKEN不包含字符'=',则应用规则1。否则,应使用7b。
7.b.
[不是第一个字]如果TOKEN包含等号字符:
如果以'='开头,则返回令牌WORD。
如果'='前面的所有字符都形成有效名称(参见IEEE Std 1003.1-2001的基本定义卷,第3.230节,名称),令牌ASSIGNMENT_WORD将被退回。(引用的字符不能参与形成有效名称。)
否则,未指定是返回ASSIGNMENT_WORD还是WORD。
NAME的分配应按照简单命令中的规定进行。
来自Shell Command Language规范的2.9.1 ("Simple Commands"):
如果没有命令名称结果,变量赋值将影响当前的执行环境。否则,应为命令的执行环境导出变量赋值,并且不应影响当前执行环境(特殊内置函数除外)。 [...]
强调补充。