Anexa string variável a si mesma [fechada]

1

Eu tenho uma variável em um loop. Eu adiciono seu conteúdo a um arquivo, mas quero anexá-lo a ele mesmo para que eu possa usá-lo para fazer outras coisas, como enviar e-mails.

Eu tentei variable+=$variable , mas não funcionou.

Eu quero ter acesso à variável fora do do ... done

    
por C Ts 16.12.2013 / 18:52

2 respostas

5

Aposto que o seu loop faz parte de um pipeline

seq 5 | while read num; do x+=$num; done; echo $x 
# expect "12345", actually see ""

No bash, quando você constrói um pipeline, ele gera sub-shells para todas as partes. Quando o subshell sai, qualquer variável modificada dentro dele é destruída também.

Você precisa codificar com mais cuidado para garantir que você use a variável no mesmo shell em que você a modifica.

Este exemplo ecoa o var na mesma sub-lista:

$ seq 5 | { while read num; do x+=$num; done; echo $x; }
12345

Este exemplo usa substituição de processo para que o loop seja executado no shell atual

$ while read num; do x+=$num; done < <(seq 5)
$ echo $x
12345
    
por 16.12.2013 / 19:08
1

Se essas forem apenas strings, você pode acrescentar assim:

Exemplo

$ somevar="a string"
$ echo $somevar
a string

$ somevar="$somevar$somevar"

$ echo $somevar
a stringa string

Loops

Você pode usar a mesma técnica em um loop for no Bash.

$ a="0"; for i in $(seq 3); do a="$a$i"; echo "$i | $a"; done
1 | 01
2 | 012
3 | 0123
    
por 16.12.2013 / 19:08

Tags