Чтение нескольких строк в bash без появления новой подоболочки?
Я пытаюсь сделать что-то вроде
var=0
grep "foo" bar | while read line; do
var=1
done
К сожалению, это не сработает, так как труба заставляет время работать в подоболочке. Есть лучший способ сделать это? Мне не нужно использовать "читать", если есть другое решение.
Я просмотрел Bash область видимости переменных, которая похожа, но я не мог получить от нее ничего, что сработало.
Ответы
Ответ 1
Если вы действительно делаете что-то упрощенное, вам даже не нужен цикл 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)
Ответ 2
тогда не используйте pipe и теряйте grep
var=1
while read line
do
case "$line" in
*foo* ) var=1
esac
done <"file"
echo "var after: $var"