¿Cómo imprimo el elemento de matriz de una matriz Bash en líneas separadas? Este funciona, pero seguramente hay una mejor manera:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Probé este pero no funcionó:
$ IFS=$'\n' echo ${my_array[*]}
one two three

| grep -v '^$'?Solo cita el argumento para hacer eco:
el sub shell ayuda a restaurar el IFS después de su uso
fuente
IFS=$'\n' echo "${my_array[*]}"que no funciona. ¡Oh bien!echoestá integrado en Bash. Sin embargo, puede envolverlo en una función y funcionará. gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Utilizando para :
Usando la historia ; tenga en cuenta que esto fallará si sus valores contienen
!:Usando basename ; tenga en cuenta que esto fallará si sus valores contienen
/:Usando shuf ; tenga en cuenta que los resultados pueden no aparecer en orden:
fuente
Intenté las respuestas aquí en un gigante para ... if loop, pero no tuve ninguna alegría, así que lo hice así, tal vez desordenado pero hice el trabajo:
aunque eso agregó un espacio a la lista, lo cual está bien, quería un poco sangrado. También suponga que "\ n" podría imprimirse en el original $ EP_LIST.
fuente
Otra variante útil es canalizar a
tr:echo "${my_array[@]}" | tr ' ' '\n'Esto se ve simple y compacto
fuente
my_array=( "one two" three )4+, tuve que usarloecho "${my_array[@]}" | tr '' ' \n', aunque personalmente evitaría usarloechoasí, dondetrcreo que algo asítr '' ' \n' <<<"${my_array[@]}"podría ser un poco más fácil de leer más tarde.