Zsh 进程替换=(列表)在参数中间 我如何在参数的中间使用 =(list)< /Cult>风格的进程替换?< /p>

Zsh 进程替换=(列表)在参数中间 我如何在参数的中间使用 =(list)< /Cult>风格的进程替换?< /p>,zsh,Zsh,这项工作: % echo =(echo) /tmp/zshxxxxxx 这也是: % echo =(echo):works /tmp/zshxxxxxx:works 但这并不是: % echo broken:=(echo) zsh: missing end of string 值得注意的是,这也适用于: % echo works:<(echo) works:/proc/self/fd/11 %echo工作:使用参数扩展来“缓冲”进程替换 % echo fixed:${:-=(ech

这项工作:

% echo =(echo)
/tmp/zshxxxxxx
这也是:

% echo =(echo):works
/tmp/zshxxxxxx:works
但这并不是:

% echo broken:=(echo)
zsh: missing end of string
值得注意的是,这也适用于:

% echo works:<(echo)
works:/proc/self/fd/11

%echo工作:使用参数扩展来“缓冲”进程替换

% echo fixed:${:-=(echo)}
fixed:/tmp/zshxxxxxx

我一直在尝试对makefile使用前面的答案,它并不是那么简单,所以这里是我的解决方案

最初的问题是,使用MinGW时,命令行的长度非常有限,如果对象列表很长,它将被截断,因此我需要使用gcc的@file语法,它允许在文件中提供参数

SHELL := /bin/zsh

myprog.exe: very.o long.o list.o of.o obj.o files.o ...
        gcc -o $@ @$${:-=(<<< \"$^\")} 
SHELL:=/bin/zsh
myprog.exe:very.o long.o list.o of.o obj.o files.o。。。
gcc-o$@$${-=(
myprog.exe: very.o long.o list.o of.o obj.o files.o ...
        () { gcc -o $@ @$$1 } =(<<< "$^")