Bash 中的条件管道

Bash 中的条件管道

test如果满足某些条件,bash 中是否有任何内置方法可以进一步管道输出?

本质上我想知道我是否必须自己编写以下函数或者是否存在一些已经实践过的方法:

check() {
    read temp_var
    test "$temp_var" $@ && echo $temp_var
}

其用法如下:

$ echo foo | check == "foo" | cat
=> foo

编辑:上述函数适用于所有test可以理解的条件,包括数字条件,例如

$ echo 42 | check -gt 30 | cat
=> 42

答案1

字符串匹配,可选包括正则表达式匹配

grep是一个标准实用程序,它似乎完全可以满足您的要求:

echo foo | grep -x 'foo' | cat

我推测cat这里指的是更复杂的管道。如果不是,那么上面的内容当然可以简化为:

echo foo | grep -x 'foo'

grep是一款功能强大的实用程序,具有许多选项。请参阅man grep以了解详细信息。

例子

$ echo 'foo' | grep -x 'foo' | cat
foo
$ echo 'goo' | grep -x 'foo' | cat
$ 

更复杂的测试,包括数值测试

grep适用于字符串。对于更复杂的测试(包括比较、不等式和数值测试),awk非常有用。例如:

$ echo 64 | awk '$1 <= 65' | cat
64
$ echo 66 | awk '$1 <= 65' | cat
$ 

可以使用数学表达式:

$ echo 8 | awk '2*$1+1 <= 17' | cat
8
$ echo 9 | awk '2*$1+1 <= 17' | cat
$ 

还可以测试非数字排序:

$ echo a | awk '$1 < "b"' | cat
a
$ echo c | awk '$1 < "b"' | cat
$ 

相关内容