Anexa string a elementos da matriz e junte-os em uma expressão

1

Vamos supor que eu tenha uma matriz

> words=(foo bar baz)

Agora eu posso juntar os elementos

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

E posso acrescentar uma string aos elementos:

> echo ${^words}yeah
fooyeah baryeah bazyeah

Com o seguinte, posso adicionar e juntar os elementos:

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

É possível imprimir "fooyeah, baryeah, bazyeah" em uma única expressão, ou seja, sem usar variáveis adicionais?

Bônus: Posso imprimir isso sem usar nenhuma variável?

Até onde eu sei, isso se resume a executar a expansão de parâmetros em strings, mas não consegui descobrir como (ou se) isso é possível.

    
por Simon Kohlmeyer 08.07.2016 / 19:41

1 resposta

1

A resposta é

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

ou

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

sem usar variáveis em tudo

A parte crítica é ${name:-word} . É explicado em o manual .

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

If name is set, or in the second form is non-null, then substitute its value; otherwise substitute word. In the second form name may be omitted, in which case word is always substituted.

Obrigado ao phy1729 do #zsh por apontar isso para mim:)

    
por 08.07.2016 / 22:49

Tags