shell变量扩张 - 间接调用时用ENV的实用程序 [英] Shell variable expansion - indirection while calling a utility with env

查看:192
本文介绍了shell变量扩张 - 间接调用时用ENV的实用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出ENV(即调用一个新的环境UTIL)。

I was trying to figure out env, ( i.e. calling a util with a new environment).

只是作为一个例子我的环境变量的 KDEDIRS =的/ usr 在我目前的环境,可以说I型:

Just as an example my environment variable KDEDIRS = /usr in my current environment and lets say I type:

env -i KDEDIRS=/home/newkdedir env

此输出 KDEDIRS = /家庭/ newkdedir 预期。的(即调用新环境第二ENV)

现在我想打电话说实用的回声同样的方式

Now i wanna call say utility echo same way

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

这显然不是要去工作BEC。外壳扩展KDEDIRS它得到呼应之前。所以输出的的/ usr (即,在当前的环境值)

This is obviously not gonna work bec. shell expands KDEDIRS before it gets to echo. So the output is /usr (i.e. value in the current environment)

然后我尝试和间接键入

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

这没什么输出

我可能会有点困惑,但我怎么可以让外壳展开的 KDEDIRS 根据新创建的环境变量的回声

I might be a little bit confused about this but how can i make the shell expand that KDEDIRS variable according to the newly created environment for echo?

推荐答案

扩张发生,因为构建env命令行还设置了变量的一部分。
未见扩张,就是命令的执行中完成的。所以,你必须添加另一个命令行扩展作为命令的一部分。例如。

Expansion happens as part of constructing the env command line which also sets the variable. No expansion is done within the execution of that command. So you must add another command line expander as part of that command. E.g.

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

间接寻址无关吧。

Indirection has nothing to do with it.

这篇关于shell变量扩张 - 间接调用时用ENV的实用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆