a=2
a=3 echo $a #prints 2
有人能解释一下为什么会有人在第二行使用以上的代码吗? 因为a=3会被忽略,没有“回车”。 但我看到像上面这样的脚本中使用它,不确定目的是什么。
a=2
a=3 echo $a #prints 2
$a
在a=3
被评估之前会被Shell(Bash)展开。因此,echo
将其参数视为2
,并打印出来。(如果您使用set -x
,则可以看到执行的内容是a=3 echo 2
。)
var=val command
用于设置一个环境变量,在command
执行期间可见,但其他地方不可见。因此,当command
读取环境变量时(例如使用getenv()
),$var
的值为val
。
如果echo
在运行时查找$a
,它将具有值3
。
在设置环境并为变量 a
设置不同的值(3)之前,父进程会先展开 a
。尽管通过 echo
将变量 a
设置为 3
执行了,但该值已经被提前展开。因此,现在已经太晚了。
你可以改为:
a=3 bash -c 'echo $a'
a=3
之前,变量$a
已经被展开。通常情况下,使用var=val command
设置环境变量,以便在command
执行期间可见,但其他地方不可见。在这种情况下,变量$a
将在echo
命令中被解释为3
,但其参数仍然是2
。 - Biffena=$value echo $a
而不是echo $value
。 - chepner