为什么当我更改 ENV 变量并在同一命令中回显它时,我看不到新值?

Jon*_*ant 2 shell bash environment-variables

当我运行时PATH=abc:$PATH echo $PATH,我得到的是旧值PATH,而不是abc:PATH

为什么是这样?我怎样才能得到abc:$PATH

PATH=/mybin:$PATH which python编辑:如果/mybin有 python 可执行文件怎么样?

Kus*_*nda 5

当你跑步时

PATH=abc:$PATH echo $PATH
Run Code Online (Sandbox Code Playgroud)

或者,在更一般的情况下,

variable=value utility
Run Code Online (Sandbox Code Playgroud)

然后variable在环境中设置utility(但不是在当前环境中)。

但是,当解析命令行时,变量的值将从当前PATH环境中获取。

您必须在变量扩展的环境中设置变量。您可以通过将其分为两个步骤来完成此操作,如

PATH=abc:$PATH; echo "$PATH"
Run Code Online (Sandbox Code Playgroud)

这将PATH在当前环境中设置,然后执行echo "$PATH",或者为子 shell 设置变量,如

PATH=abc:$PATH sh -c 'echo "$PATH"'
Run Code Online (Sandbox Code Playgroud)

PATH这将在 中设置变量sh -c,但不在当前 shell 中。

在你的第二个例子中,

PATH=/mybin:$PATH which python
Run Code Online (Sandbox Code Playgroud)

which实用程序可能会说自从您在其环境中进行修改以来python就找到了该实用程序。请注意,这里的 从未在当前环境中扩展,而是由./mybinPATHPATHwhich

顺便说一句,which python写得更好(更便携)command -v python(参见“为什么不使用“which”?那么使用什么? ”)。


只是快速反思一下你的标题,你所说的“ENV变量”。该ENV变量,即使这不是您的意思,也恰好是某些实现sh(以及其他一些 shell)使用的环境变量。如果其值是文件名,则将在启动交互式 shell 会话之前获取该文件。 bash有一个BASH_ENV变量,其工作方式相同,但适用于非交互式 shell。


归档时间:

查看次数:

242 次

最近记录:

7 年,3 月 前