Answers:
这里涉及两个shell:
调用外壳程序,从中运行此程序的交互式外壳程序
非登录非交互外壳,由 bash -c
现在的问题是,在双引号中将变量扩展为它们各自的值,这对于任何shell都是如此。
因此,正如您使用双引号一样,变量扩展$v
实际上发生在调用shell中,而不是在被调用shell中。但是,声明v=value
发生在被称为非交互式外壳上。
因此,总的来说,您已经在调用的shell中定义了变量,并在调用的shell中(事先)对其进行了扩展。由于在调用外壳程序中未设置value变量,因此在输出中没有任何结果。
现在,要使变量定义和扩展在生成的外壳中进行,请使用单引号或转义$
:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
用双引号$v
替换为交互式外壳。使用单引号:
$ bash -c 'v=value;echo $v'
value