This question already has answers here:

How do I set a variable to the output of a command in Bash?
(14个答案)
我不知道如何将命令通过bash的输出保存到变量中:
PID = 'ps -ef | grep -v color=auto | grep raspivid | awk '{print $2}''

我必须用一个特殊的字符作撇号还是管?
谢谢!

最佳答案

要捕获shell中命令的输出,请使用命令替换:$(...)。因此:

pid=$(ps -ef | grep -v color=auto | grep raspivid | awk '{print $2}')

笔记
在shell中赋值时,等号周围不能有空格。
在为本地使用定义shell变量时,最好使用小写或混合大小写。对系统重要的变量以大写字母定义,您不希望意外覆盖其中一个变量。
简化
如果目标是得到raspivid进程的pid,那么grepawk可以组合成一个进程:
pid=$(ps -ef | awk '/[r]aspivid/{print $2}')

注意从输出中排除当前进程的简单技巧:我们搜索raspivid而不是[r]aspivid。字符串[r]aspivid与正则表达式[r]aspivid不匹配。因此,当前进程将从输出中移除。
awk的灵活性
为了说明awk如何替换对grep的多个调用,请考虑以下情况:假设我们希望找到包含raspivid但不包含color=auto的行。对于awk,两个条件可以逻辑组合:
pid=$(ps -ef  | awk '/raspivid/ && !/color=auto/{print $2}')

这里,/raspivid/需要与raspivid匹配。&&符号表示逻辑“和”。regex!之前的/color=auto/表示逻辑上的“not”。因此,/raspivid/ && !/color=auto/只在包含raspivid但不包含color=auto的行上匹配。

关于linux - 使用管道和撇号时,如何将bash命令的输出捕获到变量中? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28267453/

10-10 15:01