ich würde gerne
$ echo a{b,c,d}
um eine kommagetrennte Liste wie
ab,ac,ad
anstelle der üblichen Ausgabe
ab ac ad
Was ist der einfachste Weg, dies in der Kommandozeile zu tun?
Angenommen, die Elemente enthalten keine Leerzeichen, könnten Sie Leerzeichen in Kommas übersetzen:
echo a{b,c,d} | tr ' ' ,
welche produziert:
ab,ac,ad
Sie können auch Bereiche mit Zeichen verwenden:
echo a{b..d} | tr ' ' ,
Dies ist besonders nützlich, wenn Sie eine größere Reichweite wünschen.
Es scheint, dass Bash $ IFS nicht verwendet, um die generierten Wörter zu verbinden. Eine andere Technik wäre die erzeugten Wörter in einem Array zu speichern und dann IFS $ wird im Spiel sein:
Ich werde eine Subshell verwenden, damit ich die IFS dieser Shell nicht ändere: Wählen Sie eine aus
( words=( a{b,c,d} ); IFS=,; echo "${words[*]}" )
( set -- a{b,c,d}; IFS=,; echo "$*" )
Das gibt den durch Kommas getrennten String an stdout aus. Wenn Sie es erfassen möchten:
joined=$( set -- a{b,c,d}; IFS=,; echo "$*" )
Ich bin sicher, dass es viele Möglichkeiten gibt, dies zu erreichen. Hier ist eine Methode:
quelle
Erweitern Sie die Elemente, wie Sie sie gezeigt haben, und führen Sie eine Schleife über sie aus. Fügen Sie dabei allen Elementen außer der ersten Iteration das Komma hinzu:
Ergebnis:
Siehe bash-Parametersubstitution .
quelle
Hier ist eine reine Bash-Lösung.
Der Teil vor dem Semikolon wird
ab ac ad
der Variablen zugewiesenIN
und der zweite Teil verwendet Suchen und Ersetzen, um alle Leerzeichen in Kommas zu ändern. Das//
bedeutet alle Übereinstimmungen, nicht nur die erste.Tun Sie alles in einer Subshell (in Klammern), um Ihren Namespace nicht zu verschmutzen.
quelle
Es ist erwähnenswert, dass in vielen Kontexten ein nachgestelltes Komma in einer solchen Liste zulässig ist. WENN ein nachgestelltes Komma zulässig ist, ist die einfachste Möglichkeit, die Ersetzung durchzuführen
printf
:(Wo
some-command
ist ein Befehl, der auf einer durch Kommas getrennten Liste ausgeführt wird und sich nicht für ein nachgestelltes Komma interessiert?)Selbst wenn Sie kein nachgestelltes Komma haben müssen, können Sie es verwenden
printf
. Sie müssen nur die Anzahl der erwarteten Argumente angeben, was es für sehr lange Listen ungeschickter macht:quelle