não muda depois de encontrar & while [duplicado]

1

Meu código

var=34
find $1 -type f | while read line;
do
        file_status='file  "$line"'
        file_name='echo $line | sed s/".*\/"//g'
        line_length=${#file_name}
        if [ $line_length -gt $n ]; then
                echo "hi there"
                var=$((var+1))
        fi
done
echo $var

Eu posso ver a mensagem oi lá várias vezes, mas minha variável será 34 depois que eu terminar com o loop while.

    
por user1452079 04.04.2016 / 17:35

1 resposta

1

Porque você usou um pipe ( | ) e comandos em torno do pipe são executados em subshells.

Assim, o valor da variável var é alterado (incrementado) no subshell relevante e sai do escopo à medida que o subshell sai, portanto, ele não terá impacto no valor do shell pai, portanto, o shell pai ainda terá o valor 34.

Para resolver isso, você pode usar a substituição de processo para executar find :

var=34
while read line; do
        file_status='file  "$line"'
        file_name='echo $line | sed s/".*\/"//g'
        line_length=${#file_name}
        if [ $line_length -gt $n ]; then
                echo "hi there"
                var=$((var+1))
        fi
done < <(find $1 -type f)
echo $var
    
por 04.04.2016 / 17:37

Tags