Wenn ich ein Array wie dieses in Bash habe:
FOO=( a b c )
Wie verbinde ich die Elemente mit Kommas? Zum Beispiel, indem ich a,b,c
.
Wenn ich ein Array wie dieses in Bash habe:
FOO=( a b c )
Wie verbinde ich die Elemente mit Kommas? Zum Beispiel, indem ich a,b,c
.
Kombinieren Sie das Beste aus allen bisherigen Welten mit folgender Idee.
# join with separator
join_ws() { local IFS=; local s="${*/#/$1}"; echo "${s#"$1$1$1"}"; }
Dieses kleine Meisterwerk ist
Beispiele:
$ join_ws , a b c
a,b,c
$ join_ws '' a b c
abc
$ join_ws $'\n' a b c
a
b
c
$ join_ws ' \/ ' A B C
A \/ B \/ C
Hier ist eine einzelne Zeile, die ein bisschen seltsam ist, aber gut für mehrstellige Begrenzungszeichen funktioniert und jeden Wert unterstützt (einschließlich Leerzeichen oder irgendetwas):
ar=(abc "foo bar" 456)
delim=" | "
printf "%s\n$delim\n" "${ar[@]}" | head -n-1 | paste -sd ''
Dies würde in der Konsole wie folgt angezeigt
abc | foo bar | 456
Nota: Beachten Sie, dass einige Lösungen die printf
をもって ${ar[*]}
und einige mit ${ar[@]}
?
Diejenigen mit @
verwenden Sie die printf
Funktion, die mehrere Argumente durch Wiederholung der Formatvorlage unterstützt.
Diejenigen mit *
sollte nicht verwendet werden . Sie brauchen eigentlich nicht printf
und verlassen sich auf die Manipulation des Feldtrenners und die Worterweiterung der Bash. Diese würden genauso gut funktionieren mit echo
, cat
, usw. - Diese Lösungen verwenden wahrscheinlich printf
weil der Autor nicht wirklich versteht, was er da tut...
Ich glaube, dies ist die kürzeste Lösung, denn Benamin W. bereits erwähnt:
(IFS=,; printf %s "${a[*]}")
Ich wollte noch hinzufügen, dass Sie die Subshell weglassen können, wenn Sie zsh verwenden:
IFS=, printf %s "${a[*]}"
Test:
a=(1 'a b' 3)
IFS=, printf %s "${a[*]}"
1,a b,3
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.