bash -c "v=value; echo $v" 不显示任何内容

bash -c "v=value; echo $v" 不显示任何内容

从命令行屏幕执行以下操作:

bash -c "v=value; echo $v"

什么都不显示。没问题吗?我如何在这种执行中为变量赋值?

答案1

这里涉及到两个 shell:

  • 调用 shell,即运行此命令的交互式 shell

  • 非登录、非交互式 shell,由bash -c

现在,问题是,在双引号内,变量被扩展为它们各自的值,对于任何 shell 来说都是如此。

因此,由于您使用了双引号,因此变量扩展$v实际上是在调用 shell 中进行的,而不是在被调用 shell 中进行的。但是声明v=value是在被调用的非交互式 shell 中进行的。

因此,总的来说,您在被调用的 shell 中定义了变量,并在调用的 shell 中 (预先) 进行了扩展。由于 value 变量在调用的 shell 中未设置,因此您在输出中不会得到任何内容。

现在,为了使变量定义和扩展在生成的 shell 中进行,请使用单引号或 escape $

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value

答案2

使用双引号$v将被交互式 shell 替换。使用单引号:

$ bash -c 'v=value;echo $v'
value

相关内容