從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