#!/bin/bash# 第一部分 ret=$(ps aux | grep -v grep) # 没问题 echo $ret# 第二部分 cmd=\'ps aux | grep -v grep\' # 管道有问题 | ret=$($cmd) echo $retHow ...
#!/bin/bash
# 1st part
ret=$(ps aux | grep -v grep) # thats OK
echo $ret
# 2nd part
cmd="ps aux | grep -v grep" # a problem with the pipe |
ret=$($cmd)
echo $ret
我怎样才能像在第二部分中那样使用命令字符串?我认为管道是问题所在。尝试过逃避它,但没有帮助。得到一些 ps 的 snytax 错误。
这里不建议 eval
使用 BashFAQ/048 - Eval 命令和安全问题 .
您可以通过定义和调用下面的函数以简单的方式解决此问题
ps_cmd() {
ps aux | grep -v grep
}
并在脚本中使用它作为
output="$(ps_cmd)"
echo "$output"
另外,值得一读的是,看看为什么将命令存储在变量中不是一个好主意,并且有很多潜在的陷阱 - BashFAQ/050 - 我试图将命令放入变量中,但复杂的情况总是失败!