bash -c“ v = value; echo $ v”什么也不显示


Answers:


18

这里涉及两个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

1

用双引号$v替换为交互式外壳。使用单引号:

$ bash -c 'v=value;echo $v'
value
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.