将字符串附加到数组元素并将它们连接到一个表达式中

将字符串附加到数组元素并将它们连接到一个表达式中

假设我有一个数组

> words=(foo bar baz)

现在我可以加入元素

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

我可以将字符串附加到元素:

> echo ${^words}yeah
fooyeah baryeah bazyeah

通过以下内容,我可以附加和连接元素:

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

是否可以在单个表达式中打印“fooyeah,baryeah,bazyeah”,即不使用额外的变量?

奖励:我可以不使用任何变量来打印它吗?

据我所知,这归结为在字符串上运行参数扩展,但我无法找出这是如何实现的(或者是否实现)。

答案1

答案是

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

或者

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

根本不使用变量

关键部分是${name:-word}。解释如下手册

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

如果设置了名称,或者第二种形式非空,则替换其值;否则替换单词。在第二种形式中,可以省略名称,在这种情况下总是用单词代替。

感谢 #zsh 的 phy1729 向我指出这一点 :)

相关内容