Aggiungi stringa agli elementi dell'array e uniscili in un'unica espressione


2

Supponiamo che io abbia un array

> words=(foo bar baz)

Ora posso unire gli elementi

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

E posso aggiungere una stringa agli elementi:

> echo ${^words}yeah
fooyeah baryeah bazyeah

Con quanto segue, posso aggiungere e unire gli elementi:

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

È possibile stampare "fooyeah, baryeah, bazyeah" in una sola espressione, cioè senza usare variabili aggiuntive?

Bonus: posso stamparlo senza usare alcuna variabile?

Per quanto posso dire, questo si riduce all'esecuzione dell'espansione dei parametri sulle stringhe, ma non sono stato in grado di scoprire come (o se) ciò è possibile.


Questo è essenzialmente un duplicato di questa domanda su SO . Secondo la mia risposta, potresti ottenerlo echo ${(j:, :):-${^${=:-foo bar baz}}yeah}, che in realtà è più difficile da scrivere e 12 caratteri più lungo di echo fooyeah, baryeah, bazyeah. Quindi ha senso soprattutto se sono coinvolte variabili, ad esempio echo ${(j:, :):-${^${words}}yeah} ( wordsessendo un array).
Adaon,

Wow, hai perfettamente ragione. Non sono riuscito a trovare quella domanda. Ora mi chiedo perché ho pubblicato anche qui. E stavo scrivendo la risposta proprio come hai commentato. Lascerò che le mod decidano cosa fare con questa domanda ora.
Simon Kohlmeyer,

Risposte:


2

La risposta è

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

o

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

senza usare affatto le variabili

La parte critica è ${name:-word}. È spiegato nel manuale .

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

Se il nome è impostato o nella seconda forma è diverso da null, sostituirlo con il suo valore; altrimenti sostituire la parola. Nella seconda forma il nome può essere omesso, nel qual caso la parola viene sempre sostituita.

Grazie a phy1729 di #zsh per avermelo segnalato :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.