【发布时间】:2018-02-13 21:02:05
【问题描述】:
我有一个函数应该评估作为字符串传递给它的命令,并在命令失败时显示输出。但是,我遇到了一些问题:
$(echo "pwd")
效果很好(我看到了文件和目录)。但是,当我想检索此命令的输出时:
var=$(echo "pwd")
echo ${var}
我得到以下输出:
pwd
为什么将变量分配给输出会导致如此显着的变化?我查了一下,这似乎是检索输出的推荐方式(即参见here)。
另外,我基于this 的问题并尝试了不同的方法:
cmd="ls"
$cmd
file1 file2 dir1
a=$cmd
echo ${a}
ls
结果与之前的方法相同。我对here 和here 的答案有同样的问题。
我做错了什么?如何获得作为命令评估的字符串的输出?
编辑:我尝试使用$():
> var="pwd"
> ${var}
/c/Users/myDir
> $(${var})
bash: /c/Users/myDir: Is a directory
Edit2:我需要更改当前工作目录,所以据我所知,我不能使用$()。如何在不创建子流程的情况下获得输出?
【问题讨论】:
-
好吧,
var是pwd,因此echo ${var}将输出pwd... 你的意思是运行$(echo ${var})? -
把
$()看成一个变量会更容易理解。假设变量$a包含密码,然后只需输入$a将运行命令,其中var=$a会将$a的内容(即密码,而不是命令的输出)分配给var。$()也是如此。
标签: bash output eval variable-assignment assign