Чтение нескольких строк в bash без появления новой подоболочки? - PullRequest
14 голосов
/ 04 марта 2010

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

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

К сожалению, это не работает, так как канал заставляет время работать в подоболочке. Есть лучший способ сделать это? Мне не нужно использовать «читать», если есть другое решение.

Я смотрел на Область видимости переменной Bash , которая похожа, но я не мог получить ничего, что сработало из этого.

Ответы [ 2 ]

21 голосов
/ 04 марта 2010

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

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

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

VAR=0
while read line ; do
    VAR=1
    # do other stuff
done <  <(grep "foo" bar)
3 голосов
/ 04 марта 2010

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

var=1
while read line
do  
   case "$line" in
    *foo* ) var=1
   esac   
done <"file"
echo "var after: $var"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...