Чтение нескольких строк в ударе, не порождая новую подоболочку?

Я пытаюсь сделать что-то как

var=0  
grep "foo" bar | while read line; do  
   var=1  
done

К сожалению, это не работает, так как канал вызывает, в то время как работать в подоболочке. Существует ли лучший способ сделать это? Я не должен использовать "чтение", если существует другое решение.

Я посмотрел на объем переменной Bash, который подобен, но я не мог получить ничего, что работало от него.

14
задан Community 23 May 2017 в 12:18
поделиться

2 ответа

Если вы действительно делаете что-то настолько упрощенное, вам даже не нужен цикл while read. Сработает следующее:

VAR=0
grep "foo" bar && VAR=1
# ...

Если вам действительно нужен цикл, потому что в цикле происходят другие вещи, вы можете перенаправить с <( команды ) подстановку процесса:

VAR=0
while read line ; do
    VAR=1
    # do other stuff
done <  <(grep "foo" bar)
21
ответ дан 1 December 2019 в 12:13
поделиться

, тогда не используйте канал , и потеряйте grep

var=1
while read line
do  
   case "$line" in
    *foo* ) var=1
   esac   
done <"file"
echo "var after: $var"
3
ответ дан 1 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: