Jak wydrukować element tablicy tablicy Bash na osobnych liniach? Ten działa, ale na pewno istnieje lepszy sposób:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Próbowałem tego, ale to nie działało:
$ IFS=$'\n' echo ${my_array[*]}
one two three
| grep -v '^$'
?Wystarczy podać argument do echa:
podpowłoka pomaga przywrócić IFS po użyciu
źródło
IFS=$'\n' echo "${my_array[*]}"
nie działa. No cóż!echo
jest wbudowane w Bash. Możesz jednak zawinąć go w funkcję i zadziała! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Używanie do :
Korzystanie z historii ; zauważ, że to się nie powiedzie, jeśli twoje wartości zawierają
!
:Korzystanie z basename ; zauważ, że to się nie powiedzie, jeśli twoje wartości zawierają
/
:Korzystanie z shuf ; pamiętaj, że wyniki mogą nie zostać wyświetlone w kolejności:
źródło
Próbowałem tutaj odpowiedzi w gigantycznym ... for loop, ale nie miałem żadnej radości - więc zrobiłem to w ten sposób, może niechlujny, ale wykonałem robotę:
chociaż to dodało spację do listy, co jest w porządku - chciałem, żeby było trochę wcięte. Załóżmy również, że „\ n” może być wydrukowane w oryginalnej $ EP_LIST.
źródło
Innym przydatnym wariantem jest potok do
tr
:echo "${my_array[@]}" | tr ' ' '\n'
Wygląda to prosto i kompaktowo
źródło
my_array=( "one two" three )
4
+, musiałem go użyćecho "${my_array[@]}" | tr '' ' \n'
, chociaż osobiście unikałbymecho
takiego używania , w którymtr
moim zdaniem coś podobnegotr '' ' \n' <<<"${my_array[@]}"
może być nieco łatwiejsze do przeczytania później.