¿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!echo
está 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 usarloecho
así, dondetr
creo que algo asítr '' ' \n' <<<"${my_array[@]}"
podría ser un poco más fácil de leer más tarde.