下面的 bash 咒语到底发生了什么?
x=10 echo $x
我的印象是 bash 上的命令可以使用或来链接&&
,但不能简单地用空格分隔。仅当第一个命令是分配时,上述内容才有效。例如失败但工作得很好。||
;
ls ls
foo=zoo ls
上述风格的真实案例可以在这个答案。
答案1
这是一种特殊的语法结构,用于调用带有变量集的命令。这意味着变量的范围仅限于该命令。
例如,这个命令:
x=10 sh -c 'echo $x'
与另一个命令完全等效:
( export x=10; sh -c 'echo $x' )
您给出的示例 ( x=10 echo $x
) 不是此构造的适当示例,因为变量在调用$x
之前已进行评估。echo
答案2
当你这样做时:
var=value command
您已将字符串传递var=value
给命令环境。执行命令时将使用该环境。
从bash - 环境文档:
任何简单命令或函数的环境都可以通过在其前面添加参数分配来临时增强,如 Shell 参数中所述。这些赋值语句仅影响该命令所看到的环境。
但在你的情况下,该命令不起作用。因为:
- 在大多数 shell 中,
echo
是内置函数,因此不会执行。 $x
已被外壳扩展。
答案3
您的命令资产变量 x 为您正在运行的特定命令的值,而不是在 shell 中设置它。可以这么说,本地作业。
您可以使用它来设置或更改一个命令的现有变量。
我用过的其他用途是
http_proxy=myproxy wget http://myurl
这将为该特定 url 设置特定代理,而不更改您的 shell 默认代理设置。
LANG=C sort file
根据特定的语言设置对文件进行排序,但仅限于该特定的执行。