Невозможно использовать переменную out of while и pipe в bash - PullRequest
3 голосов
/ 04 июля 2011

У меня есть такой код

var="before"  
echo "$someString" | sed '$someRegex' | while read line 
do
    if [ $condition ]; then
        var="after"
        echo "$var" #first echo
    fi 
done 
echo "$var" #second echo

Здесь сначала выводится эхо «после», а второе «до». Как я могу сделать вторую эхо-печать "после". Я думаю, что это из-за покупки трубы, я не знаю, как понять.

Спасибо за любые решения ...

Редактировать ответ:

Я исправил это, и он отлично работает. Спасибо Евгению за полезный ответ

var="before"  
while read line 
do
    if [ $condition ]; then
        var="after"
        echo "$var" #first echo
    fi 
done < <(echo "$someString" | sed '$someRegex')
echo "$var" #second echo

1 Ответ

7 голосов
/ 04 июля 2011

Причина такого поведения заключается в том, что цикл while выполняется в подоболочке, когда он является частью конвейера.Для указанного выше цикла while создается новая подоболочка с собственной копией переменной var.

Возможные обходные пути см. В этой статье: Я устанавливаю переменные в цикле, который находится в конвейере,Почему они исчезают после завершения цикла?Или почему я не могу передать данные для чтения? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...