从Ack安装页面(http://betterthangrep.com/install/)有一个班轮安装的卷曲度:不熟悉shell语法安装脚本
curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3
据我所知,这是从网站获取文件并将其保存到〜/ bin/ack,然后设置权限,但最后一部分(!#:3)会做什么? (我不认识的语法和谷歌搜索没有得到任何有用的结果)
从Ack安装页面(http://betterthangrep.com/install/)有一个班轮安装的卷曲度:不熟悉shell语法安装脚本
curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3
据我所知,这是从网站获取文件并将其保存到〜/ bin/ack,然后设置权限,但最后一部分(!#:3)会做什么? (我不认识的语法和谷歌搜索没有得到任何有用的结果)
请参阅人称击中的历史扩展部分,特别是字指示符子部分。 !#: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
是根据意义还是空白符号化的?如果它是'curl url> file',现在会有两个字还是四个? –
它根据空白标记。计数从零开始,所以'curl'为0,URL 1,重定向操作符2和文件3. – chepner
@AndyLester,也可以看到添加的示例 –
!#
意味着要执行的命令为止所输入的,但你可以:n
指定的参数。 :0
将是第一个字(curl
),:1
第二个(http...
)等。
我是betterthangrep.com的维护者,我甚至不知道它做了什么,除非知道它的工作。谢谢你问我有人提交给我时应该问什么。 :) –
请不要使用像“[预先感谢!”](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from -posts)。并且不要将它们添加到其他人的帖子中。 – NullUserException