在ack安装页面(http://betterthangrep.com/install/)上有一个带卷曲的单线安装:
curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3
据我所知,它从网站上获取文件并将其保存到〜/ bin / ack,然后设置权限,但最后一部分(!#:3)的作用是什么? (我不认识语法和谷歌搜索没有产生任何有用的结果)
答案 0 :(得分:6)
请参阅man bash中名为HISTORY EXPANSION的部分,尤其是Word Designators子部分。 !#:3
指的是管道的第三个单词,(在您的示例中)~/bin/ack
。按顺序,命令的单词是curl
,0; http://betterthangrep.com/ack-standalone
,1; >
,2; ~/bin/ack
,3; &&
,4; chmod
,5; 0755
,6; !#:3
,7。
也就是说,!#:3
是一种在不使用单独的变量或文字文本的情况下重复文件名的方法。
关于>
和空白的问题,请注意>
是一个元字符,man bash将其定义为“在不引用时分隔单词的字符”。以下之一:| &安培; ; ()< >空格标签“。因此,空格不会影响>
是否算作令牌。但请注意,在以下示例中,引用了第一个3
,以便bash不会将其解释为3>
重定向的一部分。输入行后,bash回显展开的行,然后执行它。
$ seq '3'>bbb;cat !#:3 !#:2 ccc; head !#:3 !#:8
seq '3'>bbb;cat bbb > ccc; head bbb ccc
==> bbb <==
1
2
3
==> ccc <==
1
2
3
答案 1 :(得分:3)
!#
表示执行到目前为止输入的命令,但您可以使用:n
指定参数。 :0
将是第一个单词(curl
),:1
是第二个单词(http...
),依此类推。