![在 zsh 中通过变量生成文件名而无需生成子 shell](https://linux22.com/image/1564187/%E5%9C%A8%20zsh%20%E4%B8%AD%E9%80%9A%E8%BF%87%E5%8F%98%E9%87%8F%E7%94%9F%E6%88%90%E6%96%87%E4%BB%B6%E5%90%8D%E8%80%8C%E6%97%A0%E9%9C%80%E7%94%9F%E6%88%90%E5%AD%90%20shell.png)
在 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