为什么在zsh中不能用join来展开变量?

编程语言 2026-07-08

我在使用zsh版本5.9时遇到了问题。

arr=(A B)
sep=#
print ${(j:$sep:)arr}

我本来期望看到 A#B,但输出的是 A$sepB。显然,$sep 没有被展开,但我不能从手册中推断出为什么不会发生这样的展开。这是zsh的错误吗?还是有更简单的方式将数组元素拼接起来?

解决方案

如果你想让字符串参数得到进一步的展开,可以使用 p 修饰符:

arr=(A B)
sep=#
print ${(pj:$sep:)arr}

据手册所述:

或者,在这个选项下,字符串参数可以采用 $var的形式,在这种情况下变量的值会被替换。请注意这种形式是严格的;字符串参数不会进行一般的参数展开。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章