假设我有一个数组
> 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 向我指出这一点 :)