!#:3 在 shell 命令中的含义是什么

!#:3 在 shell 命令中的含义是什么

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

有关详细信息,请参阅bash手册或非常相似zsh 手册

答案2

在 中bash,是历史替换(所有历史替换都以 开头!)。具体来说,!#表示到目前为止命令行上的所有内容,添加 ':3' 表示第三个单词(从 0 开始计数)。

所以,上面的命令翻译!#:3~/bin/ack.

相关内容