2

Есть ли какой-нибудь встроенный способ в bash для вывода на канал в дальнейшем, если соблюдены определенные условия test ?

По сути, я хочу знать, должен ли я сам написать следующую функцию или есть какой-то хороший метод, уже выполненный:

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 ответ1

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
$ 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .