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)
归档时间: |
|
查看次数: |
695 次 |
最近记录: |