如何=(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). 什么是相当简单且可读的解决方案?
使用参数扩展来“缓冲”进程替换。
% echo fixed:${:-=(echo)}
fixed:/tmp/zshxxxxxx
Run Code Online (Sandbox Code Playgroud)