NODE_MAJOR=18 echo "deb ... https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" 这里 `$NODE_MAJOR` 的替换是在当前的 bash 进程里完成的。而命令开始的 `MAJOR=18` 只影响新启动的 `echo` 进程。所以 `$NODE_MAJOR` 是替换不了的。 * * * `NODE_MAJOR=18; ... ` 里的 `NODE_MAJOR=18` 是一个独立的赋值语句,他会影响当前 shell 的环境。在其之后执行的所有进程都可以看到 `NODE_MAJOR` 的值。 (上面 `NODE_MAJOR=18 echo ...` 的里 `NODE_MOJOR=18` 是临时的,它只影响后面的 `echo` 。) * * * `NODE_MOJOR=18 python ...` ,这个例子里,`python` 进程已经可以看到 `NODE_MAJOR=18` 的值了。所以其内部是可以用它做替换的。