在 zsh 中通过变量生成文件名而无需生成子 shell

在 zsh 中通过变量生成文件名而无需生成子 shell

在 zsh 中,我在一个变量中有一个 glob 模式,我想定义另一个变量来根据该模式执行文件名生成。有没有办法在不生成子 shell 的情况下做到这一点?

以下操作无效:

x=foo*
y=$~x

显然我可以做到

x=foo*
y=$(echo $~x)

并开始执行常规完成行为。但这个问题的重点是避免产生子shell,这似乎是不必要的。

过去几天,这个问题在 stackoverflow.com 上没有得到任何回复,所以我想我可以尝试在这里提问。

答案1

如果你创建y一个数组,参数$x就会扩展:

$ x=foo*
$ y=($~x)
$ print -l $y
foo1
foo2

如果需要单个字符串,请用空格连接数组的值:

$ ys=${(j: :)y}
$ print -l $ys
foo1 foo2

相关内容