一个班轮看看grep是否返回了什么?

Phi*_*ide 7 grep xargs

我正在尝试检查机器是否是 ThinkPad 或不使用这样的东西:

sudo dmidecode | grep ThinkPad
Run Code Online (Sandbox Code Playgroud)

我希望最终结果返回真或假(或 1/0)。

我认为解决方案可能是这样的:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0
Run Code Online (Sandbox Code Playgroud)

但我不确定如何正确使用xargs这里。

hee*_*ayl 18

只需在 之后添加退出状态检查grep,默认情况下它将始终从管道的最后一个命令中获取退出状态:

sudo dmidecode | grep -q ThinkPad; echo $?
Run Code Online (Sandbox Code Playgroud)

使用-q以抑制来自任何输出grep,因为我们感兴趣的只是退出状态。


如果您愿意,可以使用命令分组,但这在这里有点多余:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}
Run Code Online (Sandbox Code Playgroud)

  • @PhilipKirkbride 模式就在那里……你为什么认为 `grep` 会返回 1?0 表示成功(为“grep”找到的模式),1 表示失败。退出状态与Truthy-Falsy概念不同,实际上相反。 (2认同)

mur*_*uru 13

如果您要使用带有if检查的 shell 脚本,请-q按照 heemayl 的建议使用:

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi
Run Code Online (Sandbox Code Playgroud)

由于if块检查命令的退出状态,我们可以grep直接依赖的退出状态,而不是打印$?和将其与其他内容进行比较。


Phi*_*ide 5

灵感来自Heemayl 的回答

sudo dmidecode | grep -q ThinkPad && echo true || echo false
Run Code Online (Sandbox Code Playgroud)

如果 grep 找到 ThinkPad,则返回 true,否则返回 false。