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