我期望a
在最初的任务之后能有所作为。但我什么也没得到。
tomas@tomas-Latitude-E4200:~$ echo $a
tomas@tomas-Latitude-E4200:~$ a=0 echo $a
tomas@tomas-Latitude-E4200:~$
a
之前设置时类似的意外行为。
tomas@tomas-Latitude-E4200:~$ a=0
tomas@tomas-Latitude-E4200:~$ a=1 echo $a
0
出色地?
答案1
临时环境变量分配生效期间命令的执行,而不是之前。特别是,它们在命令行解析过程中尚未生效。请考虑以下两个命令进行说明:
$ A=1 sh -c "echo $A"
$ A=1 sh -c 'echo $A'
1
示例命令之间的区别在于,在第一个命令中发生了变量替换前 sh -c
,然后他们就发生了期间的执行sh -c
。
从技术上讲,shell 将临时变量赋值添加到子进程的环境中;它们不会添加到 shell 的环境中。