过程替换 =(list) 在参数中间

Bal*_*zay 5 zsh

如何=(list)在参数中间使用 -style 过程替换?

这有效:

% echo =(echo)
/tmp/zshxxxxxx
Run Code Online (Sandbox Code Playgroud)

这也是如此:

% echo =(echo):works
/tmp/zshxxxxxx:works
Run Code Online (Sandbox Code Playgroud)

但这并不:

% echo broken:=(echo)
zsh: missing end of string
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这也有效:

% echo works:<(echo)
works:/proc/self/fd/11
Run Code Online (Sandbox Code Playgroud)

问题是=(list)只能站在争论的开始。引用ZSH手册:

表达式前面或后面可以有其他字符串,但为了防止与常见的字符串和模式发生冲突,最后一个形式 [this is =(list)] 必须出现在命令参数的开头,并且这些形式仅展开当第一次解析命令或赋值参数时。

我有一个接受 形式参数的工具format:filename,并且我需要使用真实文件,而不是管道,所以我无法使用<(list). 什么是相当简单且可读的解决方案?

che*_*ner 4

使用参数扩展来“缓冲”进程替换。

% echo fixed:${:-=(echo)}
fixed:/tmp/zshxxxxxx
Run Code Online (Sandbox Code Playgroud)