如何对命令行标志进行多词大括号扩展



如果您有一个命令经常接受一个带值的参数,那么您可以执行以下操作:

journalctl -u{rspamd,postfix}
# Expands to: journalctl -urspamd -upostfix

journalctl --unit={rspamd,postfix}
# Expands to: journalctl --unit=rspamd --unit=postfix

然而,有些命令不支持像这样串联的参数,并且需要--unit rspamd --unit postfix。有没有一种干净的方法可以使用大括号扩展来扩展这些标志的多个值?显然以下不起作用:

journalctl --unit {rspamd,postfix}
# Expands to: journalctl --unit rspamd postfix

只要附加参数本身不包含空格,就可以执行类似的操作

journalctl ${(z):---unit {rspamd,postfix}}

参数扩展使用z标志对参数扩展的结果执行分词。大括号扩展包含大括号扩展中的空格,因为:-后面的表达式不进行分词。因此,整个参数扩展(是的,它实际上不包含参数(产生4个字:--unitrspamd--unitpostfix

print -z引用空格字符怎么样?

% print -z journalctl --unit' '{rspamd,postfix}
% journalctl --unit rspamd --unit postfix

甚至用:逃离

% print -z journalctl --unit {rspamd,postfix}
% journalctl --unit rspamd --unit postfix

print -z:

-z

将参数推送到编辑缓冲区堆栈上,用分隔空间。

---zshbultins(1(,zsh内置命令,打印

最新更新