linux - Shell 变量扩展 - 使用 env 调用实用程序时的间接寻址

标签 linux bash shell environment-variables

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

举个例子,我当前环境中的环境变量KDEDIRS =/usr,假设我输入:

env -i KDEDIRS=/home/newkdedir env

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

现在我想以同样的方式调用 say 实用程序 echo

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

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

然后我尝试间接并输入

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

这不会输出任何内容。

我可能对此有点困惑,但是我如何让 shell 根据新创建的 echo 环境扩展 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/

相关文章:

c++ - 当前工作目录中的文件 I/O 会失败吗?

linux - 在 .*sh 文件中启动一个新的 shell

c++ - 使用 QProcess 进行管道(或命令链接)

linux - 如何在 zshell 中拆分字符串并捕获子字符串到行尾?

linux - Ubuntu 中打开终端(shell)时执行哪些启动脚本

c++ - 如何防止并行代码耗尽所有可用的系统内存?

python - 根据头信息分割fasta文件

bash - 一个简单的 'if' 语句

linux - 使用sed提取匹配输出?

shell - 如何在我的 symbian 手机上获得控制台 shell ?