Nik*_*las 28 unix bash environment environment-variables
我试图通过命令调用带有修改环境的shell命令env.
根据手册
env HELLO='Hello World' echo $HELLO
Run Code Online (Sandbox Code Playgroud)
应该回声Hello World,但事实并非如此.如果我做
HELLO='Hello World' bash -c 'echo $HELLO'
Run Code Online (Sandbox Code Playgroud)
它Hello World按预期打印(感谢此信息的答案).
我在这里错过了什么?
干杯,尼克拉斯
nos*_*nos 46
这是因为在第一种情况下,当前shell在运行命令之前会扩展$ HELLO变量.并且在当前shell中没有设置HELLO变量.
env HELLO='Hello World' echo $HELLO
会这样做:
如您所见,当前shell扩展了$ HELLO变量,该变量未设置.
HELLO='Hello World' bash -c 'echo $HELLO'
会这样做:
HELLO='Hello World为以下命令设置变量echo $HELLO如果你试图这样做:
env HELLO='Hello World' echo '$HELLO'
在这种情况下,没有shell会扩展$ HELLO,因此echo接收字符串$HELLO并打印出来.变量扩展仅由shell完成.
我想所发生的情况与我也感到困惑的情况类似。
$HELLO简而言之,第一种情况下的变量扩展是由当前 shell 完成的,而当前 shell的环境中没有该变量扩展。但在第二种情况下,单引号会阻止当前 shell 进行变量扩展,因此一切都会按预期进行。
请注意,将单引号更改为双引号会如何阻止此命令按您想要的方式工作:
HELLO='Hello World' bash -c "echo $HELLO"
Run Code Online (Sandbox Code Playgroud)
现在,由于与问题中的第一个命令相同的原因,这将失败。
| 归档时间: |
|
| 查看次数: |
23829 次 |
| 最近记录: |