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
$