ack 的安装指南建议使用以下命令安装 ack 脚本:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3
我认为!#:3
最后的 是某种反向引用,但这是什么意思? zsh 中有等效的吗?谷歌没有提供帮助。
答案1
这是一种特殊的语法,由 bash 扩展。它也适用于 zsh。
根据 bash 手册页(历史扩展部分),该模式扩展如下:
- 这事件指示符
!#
指的是到目前为止输入的整个命令行curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
:
之间的分裂事件指示符(本例为整行)和词指示符(选择子部分)- 这词指示符
3
它选择了第三单词/参数(单词计数从零开始),在本例中为~/bin/ack
。
最终的命令行(通常在执行之前显示)是:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
。
答案2
在 中bash
,是历史替换(所有历史替换都以 开头!
)。具体来说,!#
表示到目前为止命令行上的所有内容,添加 ':3' 表示第三个单词(从 0 开始计数)。
所以,上面的命令翻译!#:3
成~/bin/ack
.