a='a' echo "$a"` 和 `a='a' ; echo "$a"` 有什么区别?

我现在的理解是,shell 渲染这个 $a 的时机(顺序)问题,如果没有分号,$a 先渲染,然后才执行命令,foo=bar 是命令的一部分。

shell 会在执行当前命令 之前把 $XX 这种先渲染掉(如果是单引号里面就不渲染了)

加了分号或者是使用 && ,就是两个使用,后面命令执行的时候,变量已经被赋值了。如果没有分号或者没有&&,a=’a’ 是命令的一部分,bash 渲染变量在执行命令之前,所以渲染的时候还没有值。

另外多说一下,在 echo 命令执行的时候,$a 其实是有值的,只不过 echo 跟的参数是 ““,而不是 env(a)。