Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

1. Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 26/08/2017 - 13:59h

como faço para exibir cada linha do Array em uma linha na tela (uma linha do array; uma linha na tela)?

um exemplo ilustrativo...:
array[0]="123"
array[1]="456"
array[2]="789"

echo ${array[@]}

o problema aqui é que os três valores do array são exibidos pelo "echo" na mesma linha...

o que preciso é que o comando "echo" exiba cada valor do array em uma linha na tela... e não todos na mesma linha..



  


2. MELHOR RESPOSTA

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 28/08/2017 - 23:18h

Use o printf!

#!/bin/bash
vetor=('valor 1' 'valor 2' 'valor 3' 'valor 4' 'valor 5)
printf '%s\n' "${vetor[@]}"


$ ./script.sh
valor 1
valor 2
valor 3
valor 4
valor 5

3. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/08/2017 - 18:25h

raserafim escreveu:

como faço para exibir cada linha do Array em uma linha na tela (uma linha do array; uma linha na tela)?

um exemplo ilustrativo...:
array[0]="123"
array[1]="456"
array[2]="789"

echo ${array[@]}

o problema aqui é que os três valores do array são exibidos pelo "echo" na mesma linha...

o que preciso é que o comando "echo" exiba cada valor do array em uma linha na tela... e não todos na mesma linha..


Segue:
array2=("casa" "apartamento" "hotel" "fazenda" "comércio")
for ((x=0;x<${#array2[@]};x++));do echo "${array2[$x]}";done
casa
apartamento
hotel
fazenda
comércio

Ou
echo ${array2[@]}|sed 's/ /\n/g'
casa
apartamento
hotel
fazenda
comércio

É Isso.
É sempre bom lembrar . . . :)
Obs: se a resposta foi satisfatória, marque o tópico como resolvido e escolha a MELHOR RESPOSTA!
att.:
Marcelo Oliver



4. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 28/08/2017 - 11:32h

msoliver escreveu:

Segue:
array2=("casa" "apartamento" "hotel" "fazenda" "comércio")
echo ${array2[@]}|sed 's/ /\n/g'
casa
apartamento
hotel
fazenda
comércio
esse não funciona pq posso ter um dos ítens do array contendo espaço: por exemplo "casa compartilhada". neste caso, o "sed" interpretaria "casa" como uma linha e "compartilhada" como outra linha..

for ((x=0;x<${#array2[@]};x++));do echo "${array2[$x]}";done
casa
apartamento
hotel
fazenda
comércio
como resultado final este funciona!

porém, fico me perguntando: será que não há uma alternativa mais direta?




5. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/08/2017 - 12:46h

raserafim escreveu:

msoliver escreveu:

Segue:
array2=("casa" "apartamento" "hotel" "fazenda" "comércio")
echo ${array2[@]}|sed 's/ /\n/g'
casa
apartamento
hotel
fazenda
comércio
esse não funciona pq posso ter um dos ítens do array contendo espaço: por exemplo "casa compartilhada". neste caso, o "sed" interpretaria "casa" como uma linha e "compartilhada" como outra linha..

for ((x=0;x<${#array2[@]};x++));do echo "${array2[$x]}";done
casa
apartamento
hotel
fazenda
comércio
como resultado final este funciona!

porém, fico me perguntando: será que não há uma alternativa mais direta?

Boa tarde Serafim.
Segue:
array=("Casa Compartilhada" "Apart Hotel" "Hotel Fazenda" "Fazenda" "Comércio" "Prédio Comercial")

echo "${array[*]// /-}"|sed 's/ /\n/g'Casa-Compartilhada
Apart-Hotel
Hotel-Fazenda
Fazenda
Comércio
Prédio-Comercial

Ou
echo "${array[*]// /-}"|sed 's/ /\n/g;s/-/ /g'
Casa Compartilhada
Apart Hotel
Hotel Fazenda
Fazenda
Comércio
Prédio Comercial


O que seria "uma alternativa mais direta?"

Att:.
MSO



6. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 28/08/2017 - 13:10h

msoliver escreveu:

echo "${array[*]// /-}"|sed 's/ /\n/g;s/-/ /g'
Casa Compartilhada
Apart Hotel
Hotel Fazenda
Fazenda
Comércio
Prédio Comercial
essa sugestão também funciona como resultado final..!

precisa apenas fazer uma alteração: substituir o "-" (traço) por algo menos provável de aparecer em um nome. senão caso o nome contenha realmente um traço, então, o resultado será exibido com um espaço ao invés do traço.

o "-" (traço) poderia ser substituído, por exemplo, por algo como "EsPaÇo"..

ficando assim...:
echo "${array[*]// /EsPaÇo}" | sed 's/ /\n/g;s/EsPaÇo/ /g' 




7. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 28/08/2017 - 13:12h

msoliver escreveu:

O que seria "uma alternativa mais direta?"
penso como "mais direto" algo como, por exemplo, um parâmetro ao comando "echo" para que ele entenda corretamente o "fim de linha".

por "mais direto", assim, seria algo que não precisasse se valer, por exemplo, de um laço ou de um pipe para acrescentar um outro comando...




8. Re: Exibir cada linha do Array em uma linha na tela? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 29/08/2017 - 15:59h

SMarcell escreveu:

Use o printf!

#!/bin/bash
vetor=('valor 1' 'valor 2' 'valor 3' 'valor 4' 'valor 5)
printf '%s\n' "${vetor[@]}"
simples e direto!!

era o tipo de solução que buscava!

obrigado SMarcell!!

msoliver, obrigado pelas sugestões!

até então, estava utilizando a sua sugestão..
msoliver escreveu:

for ((x=0;x<${#array2[@]};x++));do echo "${array2[$x]}";done 









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts