我需要一个单行bash命令,它接受管道输入并返回true或false,具体取决于它是否与字符串匹配..
这似乎适用于真假部分:
test `expr match "Release:11.04" "Release:11.04"` = 13 && echo true || echo false
但我不能让它与其他命令的输出正常工作..
我需要的是这样的:
test `expr match "`lsb_release -r`" "Release:11.04"` = 13 && echo true || echo false
所以我尝试使用xargs,但我无法让它工作:
lsb_release -r | xargs -I {} test `expr {} "Release: 11.04"` = 13 && echo True || echo False
另外,如果你们中的任何一个碰巧知道更短的方法来实现这一点,那将非常受欢迎。
答案 0 :(得分:3)
您可以使用$(cmd)语法。
test $(expr match "$(lsb_release -r)" "Release:11.04") = 13 && echo true || echo false
虽然在我的系统上,在':'之后的lsb_release输出中有一个标签,所以你可能想要仔细检查你的支票。
实际上在摆弄了一下之后,我认为这将是一个更好的方式与bash(在Debian系统上测试):
[[ "$(lsb_release -r)" =~ $'Release:\t6.0.2' ]] && echo true || echo false
答案 1 :(得分:1)
为什么不这样:
[ `lsb_release -r | awk '{print $2}'` = "11.04" ] && echo true || echo false
顺便说一句,如果你需要使用嵌套的``
,你可以使用\
来逃避内部的那个:
test `expr match "\`lsb_release -r\`" "Release:11.04"`
但它看起来很难看。使用$()更具可读性,但不那么便携。
答案 2 :(得分:0)
这将是另一种更简单的方法 -
lsb_release -r | grep -q "11.04" && echo true || echo false
基本上,这会使lsb_release -r
的输出为11.04。如果找到匹配项,grep中的-q
将返回退出状态零,这将回显true
。否则false
。