我试图找出环境(即在新环境中调用util)。

举一个例子,我在当前环境中的环境变量 KDEDIRS =/usr ,可以说我输入:

env -i KDEDIRS=/home/newkdedir env

这将按预期输出 KDEDIRS =/home/newkdedir 。 (即在新环境中调用第二个环境)

现在我想用相同的方式打电话说实用工具 echo
env -i KDEDIRS=/home/new_kdedir echo ${KDEDIRS}

这显然是行不通的。 shell在回显之前扩展KDEDIRS。因此输出为/usr (即当前环境中的值)

然后我尝试间接输入
env -i KDEDIRS=/home/newkdedir echo ${!KDEDIRS}

这什么也不输出。

我对此可能有些困惑,但是如何根据新创建的 echo 的环境,使shell扩展 KDEDIRS 变量?

最佳答案

扩展是构建env命令行的一部分,该命令行也设置了变量。
在执行该命令期间不会进行任何扩展。因此,您必须在该命令中添加另一个命令行扩展器。例如。

env -i KDEDIRS=/home/newkdedir /bin/sh -c 'echo $KDEDIRS'
KDEDIRS=/home/newkdedir eval 'echo $KDEDIRS'

间接与它无关。

关于linux - Shell变量扩展-使用env调用实用程序时进行间接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2034432/

10-16 11:07