bash:变量中的管道字符用于命令替换

5
请问有人能解释一下,为什么这个不起作用?
#!/bin/bash
cmd="ps aux | grep -v grep"
cnt=$($cmd)

我从ps中看到了一个错误信息。

error: garbage option

Usage:
  ps [options]
.....

"ps aux" 命令本身就足够 - 但不要与任何其他的管道命令一起使用。

谢谢!

3个回答

5

你能详细说明一下“更好、更安全”是什么意思吗? - scai
1
你需要使用 unset -f cmd 命令来取消函数。不过你其实并不需要这么做,因为你可以直接重新定义它。 - ilkkachu

1
要执行变量$cmd中的内容,您需要使用evalcnt=$(eval $cmd)

是的,看起来是这样。如果没有管道,情况就不一样了。有趣... - chris01

-1
请使用以下命令:-
cmd= ps aux | grep -v grep 当我们想要使用来自其他命令的输出时,我们需要使用反引号 (`) 而不是双引号 (")。
谢谢

但是他们不想将命令的输出发送到 cmd,只想要命令本身。这里使用了命令替换,在下一行实际运行该命令。 - ilkkachu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接