This question already has answers here:
How do I set a variable to the output of a command in Bash?
(14个答案)
我不知道如何将命令通过bash的输出保存到变量中:
我必须用一个特殊的字符作撇号还是管?
谢谢!
笔记
在shell中赋值时,等号周围不能有空格。
在为本地使用定义shell变量时,最好使用小写或混合大小写。对系统重要的变量以大写字母定义,您不希望意外覆盖其中一个变量。
简化
如果目标是得到
注意从输出中排除当前进程的简单技巧:我们搜索
为了说明
这里,
(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,那么grep
和awk
可以组合成一个进程: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