bash 手册中说“任何简单命令或函数的环境都可以通过在其前面加上参数赋值来临时增强”。我还知道导出变量默认传递给 bash 创建的子进程。我正在测试一些非导出变量的行为,我不明白的是,当赋值后跟运算符“;”时,它是如何工作的,然后执行一些其他命令。
我的情况如下:
VAR=hello; echo $VAR
打印“你好”。
VAR=hello :; echo $VAR
打印换行符。
VAR=hello; echo $VAR; bash -c 'echo $VAR'
打印“hello”和一个换行符。
问题是,在第一个和第三个命令中,为什么要扩展 VAR?它们是不同的命令,(显然)没有前缀参数分配。
PS:我已在 bash 4.4.20 和 5.1.16 中尝试过,两者的行为相同。