【问题标题】:env on macOS doesn't apply environment variablesmacOS 上的 env 不应用环境变量
【发布时间】:2019-11-19 11:38:44
【问题描述】:

我对以下内容有点困惑:

 /usr/bin/env  V=hello echo $V somestring

仅输出

somestring

不是hello somestring,就像我对man env所期望的那样。

然而,尾

/usr/bin/env V=hello printenv

_=/usr/bin/env
V=hello

为什么会这样?

【问题讨论】:

    标签: bash macos shell environment-variables


    【解决方案1】:

    env 设置执行命令的子进程继承的环境。但是您在原始 shell 中扩展变量,并将结果作为参数传递给 env

    试试这个:

    /usr/bin/env V=hello bash -c 'echo $V somestring'
    

    单引号防止变量在原始 shell 中扩展。然后运行一个新的 shell 进程来扩展变量本身。

    【讨论】:

    • 虽然在这种情况下,env 是不需要的。 V=hello bash -c 'echo $V somestring' 也会这样做。
    • @user1934428 是的,我不太确定为什么设置环境变量需要env 命令。 AFAIK,它的主要用途是在 shebang 行中,只是为了能够在 $PATH 中搜索实际的解释器。
    • 我认为这确实是主要用途。有些人也使用它(不带参数)来转储环境,尽管我会为此使用printenv。此外,在无法动态修改环境的 shell(如 csh)中(仅用于一个程序调用),您必须为此目的使用 env
    • @user1934428 在csh中我通常写(setenv var value; program)
    • 是的,这将对应于 bash 中的 (export var=value; program)。但是var=value program 可能被认为更简单,同样env var=value program 对于 csh 上瘾者来说也可能被认为更简单。
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2020-08-23
    • 2020-02-13
    • 2011-06-25
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多