Rob*_*ila 4 command-line bash environment-variables
解释这些命令的不同结果的区别是什么?
a=2 echo $aset a=2 echo $aa=2; echo $aset a=2; echo $a小智 7
a=2 echo $a
结果: 输出一个空行
原因: Bash 为您使用它调用的每个程序提供其变量的子集(环境)(您可以使用export内置程序指定哪个)。用 eg 前缀命令a=2告诉 bash 添加$a(带有 value 2)到环境中,但是
bash它自己使用的变量集。所以,如果echo是一个程序(它实际上是一个 builtin),它会$a与其他环境变量一起接收......但echo 不关心环境变量 - 它只是吐回你给它的参数。由于本身$a未定义为变量bash,因此您的命令相当于一个 bare echo,它发出一个换行符,为您提供一个空行。
set a=2 echo $a
结果: 无输出
原因:这并没有像您想象的那样做 - 事实上,echo根本没有调用该命令。当set在没有选项的情况下调用时,它会按顺序将位置参数设置为您提供的参数。您可以使用几个额外的命令来查看这一点:
$ set a=2 echo $a
$ echo $1
a=2
$ echo $2
echo
Run Code Online (Sandbox Code Playgroud)
... 并echo $3给出一个空行,因为您试图设置$3为$a,但该行不存在。
a=2; echo $a
结果: 输出2(最后!)
原因:这是获得所需内容的正确方法:将变量设置$a为2,然后将echowith$a作为参数调用。
set a=2; echo $a
结果:
$a已经设置为2:输出2$a未设置:输出空行原因:希望你能自己解决,考虑到上面的解释。