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

chr*_*s01 5 linux bash

请有人解释一下,为什么这不起作用?

#!/bin/bash
cmd="ps aux | grep -v grep"
cnt=$($cmd)
Run Code Online (Sandbox Code Playgroud)

我从 ps 收到错误。

error: garbage option

Usage:
  ps [options]
.....
Run Code Online (Sandbox Code Playgroud)

"ps aux" 仅适用 - 但不适用于任何额外的管道命令。

谢谢!

anu*_*ava 5

使用函数将管道命令存储为更好、更安全:

取消设置cmd cnt

cmd() {
   ps aux | grep -v grep
}
Run Code Online (Sandbox Code Playgroud)

并在命令替换中使用它作为:

cnt="$(cmd)"
Run Code Online (Sandbox Code Playgroud)

请参阅有关将命令行存储在变量中的 BASH 常见问题解答