shell命令的前导键=值对如何工作?为什么他们不是错误?

时间:2014-02-19 15:55:25

标签: shell environment-variables

(my_virtualenv)my_pc:~/path$ ASDF='asdf' python
...
>>> import os
>>> os.environ['ASDF']
'asdf'

那么这是如何工作的?为什么解释器不会查找ASDF命令,如果找不到则报告错误?

1 个答案:

答案 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")

  

如果没有命令名称结果,变量赋值将影响当前的执行环境。否则,应为命令的执行环境导出变量赋值,并且不应影响当前执行环境(特殊内置函数除外)。 [...]

强调补充。