Bash: how to pass commands to a function
我有一个函数,它应该评估作为字符串传递给它的命令,并在命令失败时显示输出。但是,我遇到了一些问题:
1 | $(echo"pwd") |
工作得很好(我看到文件和目录)。但是,当我想要检索这个命令的输出时:
1 2 | var=$(echo"pwd") echo ${var} |
我得到以下输出:
1 | pwd |
为什么给输出分配一个变量会引起如此大的变化?我已经查过了,它似乎是检索输出的推荐方法(即,请参见此处)。
另外,我基于这个问题,尝试了一种不同的方法:
1 2 3 4 5 6 | cmd="ls" $cmd file1 file2 dir1 a=$cmd echo ${a} ls |
结果与前面的方法相同。我这里和这里的答案都有同样的问题。
我做错什么了?如何获取作为命令计算的字符串输出?
编辑:我尝试使用
1 2 3 4 5 | > var="pwd" > ${var} /c/Users/myDir > $(${var}) bash: /c/Users/myDir: Is a directory |
edit2:我需要更改当前的工作目录,所以据我所知,我不能使用
1 | $(command line) |
是指执行
1 | $(echo"pwd") |
作为整个命令行,它执行
1 | pwd |
当你这样做的时候:
1 | var=$(echo"pwd") |
1 | var="pwd" |
当你这样做的时候:
1 | echo ${var} |
它和
1 | echo"pwd" |
如果你想执行命令,不要把
1 | ${var} |
就像你没有把
如果您想在另一个变量中获得这个变量的输出,则必须再次使用
1 | res=$(${var}) |
1 | $ cmd="ls" |
要运行
1 2 | $"$cmd" file1 file2 dir1 |
要捕获
1 2 3 4 5 | $ a=$("$cmd") $ echo"$a" file1 file2 dir1 |
为什么这些有效?每次你写《以东记》1(3)时,精神上都要代替《以东记》1(4)。然后你得到
1 2 | $ ls file1 file2 dir1 |
和
1 2 3 4 5 | $ a=$(ls) $ echo"$a" file1 file2 dir1 |
为什么你尝试的命令失败了?因为
要调用