gpt4 book ai didi

bash - 为什么我不能指定环境变量并在同一命令行中回显它?

转载 作者:行者123 更新时间:2023-11-29 08:39:15 24 4
gpt4 key购买 nike

考虑这个片段:

$ SOMEVAR=AAA
$ echo zzz $SOMEVAR zzz
zzz AAA zzz

在这里,我在第一行将 $SOMEVAR 设置为 AAA - 当我在第二行回显它时,我得到了 AAA 内容符合预期。

但是,如果我尝试在与 echo 相同的命令行上指定变量:

$ SOMEVAR=BBB echo zzz $SOMEVAR zzz
zzz AAA zzz

... 我没有像预期的那样得到 BBB - 我得到的是旧值 (AAA)。

事情本该如此吗?如果是这样,那么您怎么能指定像 LD_PRELOAD=/... program args ... 这样的变量并让它工作呢?我错过了什么?

最佳答案

您看到的是预期的行为。问题在于父 shell 在调用具有修改后的环境的命令之前在命令行上评估 $SOMEVAR。您需要将 $SOMEVAR 的评估推迟到设置环境之后。

您的即时选项包括:

  1. SOMEVAR=BBB eval echo zzz '$SOMEVAR' zzz
  2. SOMEVAR=BBB sh -c 'echo zzz $SOMEVAR zzz'

这两个都使用单引号来防止父 shell 计算 $SOMEVAR;它仅在环境中设置后才进行评估(暂时,在单个命令的持续时间内)。

另一种选择是使用子 shell 表示法(同样由 Marcus Kuhn 在他的 answer 中建议):

(SOMEVAR=BBB; echo zzz $SOMEVAR zzz)

变量只在子shell中设置

关于bash - 为什么我不能指定环境变量并在同一命令行中回显它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com