Shell变量扩展 - 在使用env调用实用程序时间接

时间:2010-01-09 18:32:54

标签: linux bash shell environment-variables

我试图找出env,(即用新环境调用util)。

在我当前的环境中,我的环境变量 KDEDIRS = / usr 就是一个例子,让我说我输入:

env -i KDEDIRS=/home/newkdedir env

按预期输出 KDEDIRS = / home / newkdedir (即用新环境调用第二个env)

现在我想用相同的方式调用say utility echo

env -i KDEDIRS=/home/new_kdedir echo ${KDEDIRS}

这显然不会起作用。 shell在回显之前扩展了KDEDIRS。所以输出是 / usr (即当前环境中的值)

然后我尝试间接并输入

env -i KDEDIRS=/home/newkdedir echo ${!KDEDIRS} 

这不输出任何内容。

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

2 个答案:

答案 0 :(得分:5)

扩展是在构建env命令行的过程中发生的,该命令行也设置变量。 在该命令的执行中没有进行扩展。因此,您必须添加另一个命令行扩展器作为该命令的一部分。 E.g。

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

间接与它无关。

答案 1 :(得分:0)

通常,您使用`env'为其生成的命令提供环境(例如,就像您在第一个代码段中所做的那样)。通过一些不正常的转义和子shell技巧,可以将变量打印回来(也可以使用内置的shell),但这不是一个非常常见的用例(至少不是我的经验)。