Wie drucke ich das Array-Element eines Bash-Arrays in separaten Zeilen? Dieser funktioniert, aber es gibt sicherlich einen besseren Weg:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Versuchte dies, aber es hat nicht funktioniert:
$ IFS=$'\n' echo ${my_array[*]}
one two three
| grep -v '^$'
?Zitieren Sie einfach das Argument, um zu wiederholen:
Die Sub-Shell hilft bei der Wiederherstellung des IFS nach der Verwendung
quelle
IFS=$'\n' echo "${my_array[*]}"
nicht funktionieren. Naja!echo
es in Bash eingebaut ist. Sie können es jedoch in eine Funktion einbinden und es wird funktionieren! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Verwenden für :
Verwenden der Geschichte ; Beachten Sie, dass dies fehlschlägt, wenn Ihre Werte Folgendes enthalten
!
:Verwenden des Basisnamens ; Beachten Sie, dass dies fehlschlägt, wenn Ihre Werte Folgendes enthalten
/
:Mit shuf ; Beachten Sie, dass die Ergebnisse möglicherweise nicht in der richtigen Reihenfolge angezeigt werden:
quelle
Ich habe die Antworten hier in einem Riesen für ... if-Schleife ausprobiert, aber keine Freude bekommen - also habe ich es so gemacht, vielleicht chaotisch, aber den Job gemacht:
obwohl das der Liste ein Leerzeichen hinzufügte, was in Ordnung ist - ich wollte, dass es ein bisschen eingerückt wird. Angenommen, das "\ n" könnte in der ursprünglichen $ EP_LIST gedruckt werden.
quelle
Eine weitere nützliche Variante ist Pipe to
tr
:echo "${my_array[@]}" | tr ' ' '\n'
Das sieht einfach und kompakt aus
quelle
my_array=( "one two" three )
4
+ angekündigt , musste verwendet werdenecho "${my_array[@]}" | tr '' ' \n'
, obwohl ich persönlich vermeiden würde, so etwas zu verwendenecho
, wotr
meine Wahl meiner Meinungtr '' ' \n' <<<"${my_array[@]}"
nach später etwas einfacher zu lesen sein könnte.