环境变量赋值后跟命令

Mar*_*tus 6 bash

下面的 bash 咒语到底发生了什么?

x=10 echo $x
Run Code Online (Sandbox Code Playgroud)

我的印象是 bash 上的命令可以使用或来链接&&,但不能简单地用空格分隔。仅当第一个命令是分配时,上述内容才有效。例如失败但工作得很好。||;ls lsfoo=zoo ls

在这个 SO 答案中可以找到上述风格的真实案例。

Lat*_*SuD 4

这是一种特殊的语法结构,用于调用带有变量集的命令。这意味着变量的范围仅限于该命令。

例如,这个命令:

x=10 sh -c 'echo $x'
Run Code Online (Sandbox Code Playgroud)

与另一个命令完全等效:

( export x=10; sh -c 'echo $x' )
Run Code Online (Sandbox Code Playgroud)

您给出的示例 ( x=10 echo $x) 不是此构造的适当示例,因为变量在调用$x之前已进行评估。echo