Variável de incremento de Bash no loop for

1

Eu tenho o seguinte:

    #!/bin/bash

    a=0
for d in ./*/ ; do (
cd "$d"
((a++))
echo $a
); done

O que entra em cada diretório no meu caminho, incrementa a e imprime a . No entanto, a saída é sempre 1. Por que isso?

    
por Noblenectro 02.04.2016 / 19:24

2 respostas

2

Do bash (1):

   (list) list is executed in a subshell environment (see  COMMAND  EXECU‐
          TION  ENVIRONMENT below).  Variable assignments and builtin com‐
          mands that affect the  shell's  environment  do  not  remain  in
          effect  after  the  command completes.  The return status is the
          exit status of list.


Simplesmente removendo os parênteses que você tem em torno desse bloco de código, você teria algo assim:

#!/bin/bash

a=0
for d in 'seq 1 7'
do
    ((a++))
    echo $a
done

(também um pouco mais convencionalmente formatado)

o resultado é:

1
2
3
4
5
6
7
    
por 02.04.2016 / 19:50
1

Porque você coloca o corpo do loop em desnecessário (), o que o faz executar em um subshell, se bem me lembro.

    
por 02.04.2016 / 19:37

Tags