该命令中的空格的解释是什么foo= bar
?
为什么有foo=bar
不同foo= bar
的解释
示例(Ubuntu bash)
developer@1604:~$ foo=bar
developer@1604:~$ foo= bar
The program 'bar' is currently not installed. You can install it by typing:
sudo apt install bar
答案1
这是语法:Bash 变量使用紧跟在赋值运算符之后的值进行初始化=
。事情就是这样……
当您这样做时foo= bar
,您将向该变量分配一个空字符串foo
,然后执行该命令bar
。
答案2
当您这样做时foo= bar
,您将向环境变量分配一个空字符串foo
,然后执行该命令bar
。它可用于将环境变量传递给新的执行。
为什么不一样
空格是分隔符(用于分隔事物):添加空格使其成为两个事物foo=
和bar
。第一个是赋值,第二个是告诉 bash 查找文件并执行它。第一个是可选的,因此您通常只会看到第二个。第二个不是可选的:如果您只看到一个赋值,它会做一些稍微不同的事情,它分配给一个 shell 变量(不是环境变量,除非前面带有export
)。
答案3
foo= bar
:执行命令前bar
,赋值 foo
为空。正确的做法是foo=bar
变量名和赋值后不要有空格。
答案4
在 shell linux/unix 命令中,当您输入 时foo=bar
,您将字符串 bar 放入foo
变量中。为了进行检查,您可以输入echo $foo
应该返回的内容,bar
这就是变量foo
包含的内容
当您输入foo= bar
空格时,shell 解释器不会在 foo 变量和句柄 bar 中放置任何内容,作为通过 PATH 变量的应用程序命令。由于 shell 在 PATH 变量中没有找到 bar 命令,并且您使用的是 Ubuntu 发行版,因此系统会询问您是否要安装 bar 应用程序。这只是当您的应用程序未找到时弹出的消息。您可以使用以下命令检查 PATH 变量:echo $PATH
。有关此系统变量的更多信息这里