pipe condicional no bash

2

Existe alguma maneira integrada na saída do bash para o pipe ainda mais se determinada condição test for atendida?

Essencialmente, quero saber se tenho que escrever a seguinte função ou se há uma boa prática já feita:

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

que seria usado da seguinte forma:

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

EDITAR: A função acima funciona com todas as condições que o test pode compreender, incluindo as numéricas, como

$ echo 42 | check -gt 30 | cat
=> 42
    
por Slimior 03.06.2016 / 01:55

1 resposta

1

Correspondência de strings, incluindo opcionalmente correspondência de expressão regular

grep é um utilitário padrão que parece fazer exatamente o que você deseja:

echo foo | grep -x 'foo' | cat

Eu presumo que cat é usado aqui como um substituto para um pipeline mais complexo. Se não fosse, então o acima, é claro, simplifica para:

echo foo | grep -x 'foo'

grep é um utilitário poderoso com muitas opções. Veja man grep para detalhes.

Exemplos

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

Testes mais complexos, incluindo testes numéricos

grep é bom para strings. Para testes mais complexos, incluindo comparação, desigualdade e testes numéricos, awk é muito útil. Por exemplo:

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

Expressões matemáticas podem ser usadas:

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

O pedido não numérico também pode ser testado:

$ echo a | awk '$1 < "b"' | cat
a
$ echo c | awk '$1 < "b"' | cat
$ 
    
por 03.06.2016 / 02:01

Tags