Como imprimo o elemento da matriz Bash em linhas separadas? Este funciona, mas certamente existe uma maneira melhor:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Tentei este, mas não funcionou:
$ IFS=$'\n' echo ${my_array[*]}
one two three
| grep -v '^$'
?Apenas cite o argumento para ecoar:
o sub shell ajuda a restaurar o IFS após o uso
fonte
IFS=$'\n' echo "${my_array[*]}"
não funcionam. Ah bem!echo
é um builtin no Bash. No entanto, você pode envolvê-lo em uma função e ele funcionará! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Usando para :
Usando a história ; observe que isso falhará se seus valores contiverem
!
:Usando o basename ; observe que isso falhará se seus valores contiverem
/
:Usando shuf ; observe que os resultados podem não sair em ordem:
fonte
Eu tentei as respostas aqui em um gigante para ... if loop, mas não tive nenhuma alegria - então eu fiz assim, talvez confuso, mas fiz o trabalho:
embora isso tenha acrescentado um espaço à lista, o que é bom - eu queria um pouco de recuo. Suponha também que "\ n" possa ser impresso no $ EP_LIST original.
fonte
Outra variante útil é o pipe para
tr
:echo "${my_array[@]}" | tr ' ' '\n'
Parece simples e compacto
fonte
my_array=( "one two" three )
4
+ do Bash , tinha que usarecho "${my_array[@]}" | tr '' ' \n'
, embora pessoalmente eu evitasse usarecho
assim, ondetr
minha escolha acho que algo comotr '' ' \n' <<<"${my_array[@]}"
pode ser um pouco mais fácil de ler mais tarde.