从命令行屏幕执行以下操作:
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