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