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
.
Falls die zu verbindenden Elemente kein Array, sondern eine durch Leerzeichen getrennte Zeichenkette sind, können Sie etwas wie folgt tun:
foo="aa bb cc dd"
bar=`for i in $foo; do printf ",'%s'" $i; done`
bar=${bar:1}
echo $bar
'aa','bb','cc','dd'
Mein Anwendungsfall ist zum Beispiel, dass einige Zeichenketten in meinem Shell-Skript übergeben werden und ich muss diese verwenden, um eine SQL-Abfrage auszuführen:
./my_script "aa bb cc dd"
In my_script muss ich "SELECT * FROM table WHERE name IN ('aa','bb','cc','dd')" eingeben. Dann wird der obige Befehl nützlich sein.
Im Moment benutze ich:
TO_IGNORE=(
E201 # Whitespace after '('
E301 # Expected N blank lines, found M
E303 # Too many blank lines (pep8 gets confused by comments)
)
ARGS="--ignore `echo ${TO_IGNORE[@]} | tr ' ' ','`"
Was funktioniert, aber (im allgemeinen Fall) wird schrecklich brechen, wenn Array-Elemente ein Leerzeichen in ihnen haben.
(Für diejenigen, die es interessiert, ist dies ein Wrapper-Skript um pep8.py )
Vielleicht übersehe ich etwas Offensichtliches, da ich ein Neuling in der ganzen bash/zsh-Sache bin, aber es sieht für mich so aus, als ob Sie nicht die Option printf
überhaupt nicht. Und es wird auch nicht wirklich hässlich, darauf zu verzichten.
join() {
separator=$1
arr=$*
arr=${arr:2} # throw away separator and following space
arr=${arr// /$separator}
}
Zumindest hat es bei mir bisher ohne Probleme funktioniert.
Zum Beispiel, join \| *.sh
die, sagen wir mal, ich bin in meinem ~
Verzeichnis, Ausgaben utilities.sh|play.sh|foobar.sh
. Das ist gut genug für mich.
EDIT: Dies ist im Grunde Antwort von Nil Geisweiller aber verallgemeinert zu einer Funktion.
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.