从右到左的壳括号扩展

Mic*_*zek 9 zsh brace-expansion

在 zsh(和其他 shell)中,如果我包含一个像(例如)这样的参数:

{a,b,c}{d,e,f}
Run Code Online (Sandbox Code Playgroud)

大括号扩展把它变成:

ad ae af bd be bf cd ce cf
Run Code Online (Sandbox Code Playgroud)

对于我的目的,参数顺序很重要,我需要大括号从右到左而不是从左到右展开。也就是说,我希望扩展是:

ad bd cd ae be ce af bf cf
Run Code Online (Sandbox Code Playgroud)

有没有办法控制多组大括号展开的顺序?我正在寻找可以在任何情况下工作的东西,而不仅仅是这些参数。

che*_*ner 8

您可以将参数扩展与大括号扩展相结合。

% foo=(d e f)
$ echo {a,b,c}${^foo}
ad bd cd ae be ce af bf cf
Run Code Online (Sandbox Code Playgroud)

如果您不想foo单独定义(似乎很可能),您可以使用以下内容:

$ echo {a,b,c}${^:-d e f}
ad bd cd ae be ce af bf cf
Run Code Online (Sandbox Code Playgroud)

如果您rcexpandparam设置了该选项,则^在任一示例中都不需要启用此行为。

(注意:在测试时,我也shwordsplit设置了选项。如果您没有设置,请尝试,例如echo {a,b,c}${^=:-d e f}。故事的寓意:在 中几乎任何事情都是可能的zsh,但您必须确保使用正确的选项和语法的组合。)