bash script var não alterado após o loop [duplicado]

1

Sou bastante novo no bash scripting e escrevi o seguinte script para emular o comando wc -c : (sei que não conta o fim da linha)

#!/bin/bash

echo $1
len=0
cat $1 | while read line
do
    let len+=${#line}
    echo $len
done
echo $len

a saída é a seguinte:

xyz.sh
11
11
18
27
51
53
70
79
83
92
0

por que o len não permanece alterado após o loop e a enxada para fazê-lo?

    
por elyashiv 02.11.2013 / 18:23

1 resposta

3

Isso acontece porque o seu loop while está sendo executado em uma subshell. Modificações variáveis no subshell não afetam o pai.

Evite o pipe e o uso inútil de cat fazendo algum redirecionamento:

while read line
do
    let len+=${#line}
    echo $len
done < $1

Isso não requer um subshell, então as alterações em $len ficarão visíveis no pai.

    
por 02.11.2013 / 18:27

Tags