Hänge einen String an die Array-Elemente an und verbinde sie in einem Ausdruck - zsh, array

Nehmen wir an, ich habe ein Array

> words=(foo bar baz)

Jetzt kann ich die Elemente verbinden

> echo ${(j., .)words}
foo, bar, baz

Und ich kann eine Zeichenfolge an die Elemente anhängen:

> echo ${^words}yeah
fooyeah baryeah bazyeah

Mit dem Folgenden kann ich die Elemente anfĂĽgen und verbinden:

> wordsyeah=(${^words}yeah)
> echo ${(j., .)wordsyeah}
fooyeah, baryeah, bazyeah

Ist es möglich, "fooyeah, baryeah, bazyeah" in einem einzelnen Ausdruck zu drucken, d. H. Ohne Verwendung zusätzlicher Variablen?

Bonus: Kann ich das ausdrucken, ohne irgendwelche Variablen zu benutzen?

Soweit ich das beurteilen kann, läuft das darauf hinaus, Parametererweiterungen für Zeichenfolgen auszuführen, aber ich konnte nicht herausfinden, wie (oder ob) das möglich ist.

Antworten:

3 fĂĽr Antwort â„– 1

Die Antwort ist

> print ${(j., .)${:-${^words}yeah}}
fooyeah, baryeah, bazyeah

oder

> print ${(j., .)${:-{foo,bar,baz}yeah}}
fooyeah, baryeah, bazyeah

ohne Variablen ĂĽberhaupt zu verwenden

Der kritische Teil ist ${name:-word}. Es wird in erklärt das Handbuch.

${name-word}
${name:-word}

Wenn name festgelegt ist oder in der zweiten Form nicht null ist, ersetzen Sie dessen Wert. Andernfalls ersetzen Sie das Wort. In der zweiten Form kann der Name weggelassen werden. In diesem Fall wird das Wort immer ersetzt.

Vielen Dank an phy1729 von #zsh fĂĽr den Hinweis :)


Lies jetzt