shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Array deixa de existir após fim de loop


From: Jonathan Lessa
Subject: Re: [shell-script] Array deixa de existir após fim de loop
Date: Tue, 5 Dec 2017 13:24:17 -0300

Não seria porque nessa estrutura o loop acaba sendo executado em um subshell?

Em 5 de dezembro de 2017 12:55, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
 

Eu tinha testado assim e vi que tinha funcionado. Não consigo entender pq da primeira forma não funciona.

On Tue, Dec 5, 2017 at 1:51 PM Jonathan Lessa address@hidden [shell-script] <address@hidden.br> wrote:
 

Desculpe, passei por situações semelhantes antes e resolveu pra mim. Fui testar aqui e realmente não surtiu efeito, mas consegui o que vc deseja da seguinte forma:


while IFS=\| read letra numero; do
   letras+=($letra);
   numeros+=($numero);
   echo "${#letras[@]}: ${letras[@]}";
   echo "${#numeros[@]}: ${numeros[@]}";

done < input

echo "--${numeros[@]}--";
echo "--${letras[@]}--"


Em 5 de dezembro de 2017 12:39, Alfredo Casanova address@hidden [shell-script] <address@hidden.br> escreveu:
 

Jonathan, eu nunca vi isso acontecer no bash antes, a não ser que você declare a variável como local dentro de uma função. De toda forma, já tinha tentado fazer com declare -a pros dois arrays antes do loop, e mesmo assim ele sai vazio no final.

for i in {1..10}; do j+=1; done ; echo $j
1111111111


On Tue, Dec 5, 2017 at 1:36 PM Jonathan Lessa address@hidden [shell-script] <address@hidden.br> wrote:
 

Boa tarde!

Aparentemente vc não está inicializando as variáveis antes do while, quando vc as cria dentro de uma estrutura de loop elas são encerradas quando sai do loop.


2017-12-05 12:32 GMT-03:00 Alfredo Casanova address@hidden [shell-script] <address@hidden.br>:
 

Alguém sabe dizer o motivo? Não encontrei explicação:

cat input
A|1.1.1.1
B|2.2.2.2
C|3.3.3.3
D|4.4.4.4

cat input | while IFS=\| read letra numero; do
   letras+=($letra);
   numeros+=($numero);
   echo "${#letras[@]}: ${letras[@]}";
   echo "${#numeros[@]}: ${numeros[@]}";
done ;
echo "--${numeros[@]}--";
echo "--${letras[@]}--"

1: A
1: 1.1.1.1
2: A B
2: 1.1.1.1 2.2.2.2
3: A B C
3: 1.1.1.1 2.2.2.2 3.3.3.3
4: A B C D
4: 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4
----
----




--
Att.:
Jonathan Lessa
Licenciado em Informática




--
Att.:
Jonathan Lessa
Licenciado em Informática




--
Att.:
Jonathan Lessa
Licenciado em Informática

reply via email to

[Prev in Thread] Current Thread [Next in Thread]