5

ack インストール ページ (http://betterthangrep.com/install/) から、curl を使用したワンライナー インストールがあります。

curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3

ウェブサイトからファイルを取得して ~/bin/ack に保存し、権限を設定していることは理解していますが、その最後の部分 ( !#:3 ) は何をしているのでしょうか? (私は構文を認識していませんし、グーグルは有用な結果をもたらしませんでした)

4

2 に答える 2

6

man bash の HISTORY EXPANSION というセクション、特に Word Designators サブセクションを参照してください。 !#:3は、パイプの 3 番目の単語を指します (例では)~/bin/ackです。コマンドの単語は順に、curl、 0 です。 http://betterthangrep.com/ack-standalone、1; >、2; ~/bin/ack、3; &&、4; chmod、5; 0755、6; !#:3, 7. つまり!#:3、別の変数やリテラル テキストを使用せずにファイル名を繰り返す方法です。

>and whitespaceに関する質問について>は、man bash が「引用符で囲まれていないときに単語を区切る文字」と定義するメタ文字であることに注意してください。次のいずれかです。& ; ( ) < > スペースタブ」。>したがって、空白は がトークンとしてカウントされるかどうかには影響しません。ただし、次の例では、 bash がリダイレクト3の一部として解釈しないように、最初のものが引用されていることに注意してください。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
于 2012-10-14T19:03:12.510 に答える
3

!#はそれまでに入力したコマンドを実行することを意味しますが、 でパラメーターを指定できます:n:0最初の単語 ( curl)、:12 番目の単語 ( )http...などです。

于 2012-10-14T19:03:37.127 に答える