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

Jos*_*ols 9 bash environment-variables

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

bash -c "v=value; echo $v"
Run Code Online (Sandbox Code Playgroud)

什么都不显示。没关系?如何在这种执行中为变量赋值?

hee*_*ayl 18

这里涉及两个shell:

  • 调用 shell,您运行它的交互式 shell

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

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

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

因此,总的来说,您在被调用的 shell 中定义了变量,并在调用的 shell 中(预先)扩展了变量。由于调用 shell 中的 value 变量未设置,因此您在输出中什么也没有。

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

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

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

$ bash -c "v=value; echo \$v"
value
Run Code Online (Sandbox Code Playgroud)