シェルコマンドで!#:3とはどういう意味ですか


29

ackのインストールガイドでは、次のコマンドを使用してackスクリプトをインストールすることを推奨しています。

curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3 

私がいることを前提と!#:3終わりには後方参照のいくつかの種類であるが、それは何を意味するのでしょうか?zshに同等のものはありますか?Googleは役に立たなかった。


5
bashを想定; man bash、それからHISTORY EXPANSION
Jeff Schallerを

1
それは私の猫が本当に悪い時間にキーボードを横切ったことを意味します。
IQAndreas

@IQAndreas:それは有効なコマンドなので、あなたの猫は猫タイピングディテクターを打ち負かすのに十分賢くなければなりません。明らかにこれは無駄な猫ではありません。:-)⁠
G-マンは「元に戻すモニカ言う

回答:


32

これは特別な構文で、bashによって展開されます。zshでも機能します。

bashのマニュアルページ(セクションの履歴の展開)によると、パターンは次のように展開されます。

  • イベント指示子は !#ある、これまでに入力したコマンドライン全体を指し、curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
  • :イベント指定子(この場合は行全体)と単語指定子(サブパーツを選択)の間で分割します
  • この場合、3番目の単語/引数を選択する単語指定子 (単語のカウントはゼロから始まります)。3~/bin/ack

最後のコマンドライン(通常は実行前に表示されます)は次のとおり curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ackです。

詳細については、bashマニュアルまたは非常によく似たzshマニュアルを参照してください。


7
私は仕方がありません。この機能が良いアイデアだと思ったのは誰ですか?
ライモイド

3
@Rhymoidは、私が使用していない!#多くの、しかし!!!$!*!sud:pおよび他の多くは、すべての非常に有用であり、私は彼らにすべての時間を使用します。チェックアウトunix.stackexchange.com/a/67/135943
ワイルドカード

11

ではbash、履歴置換です(すべての履歴置換はで始まります!)。具体的に!#は、これまでのコマンドラインのすべてを意味し、 ':3'の追加は3番目の単語(0から始まるカウント)を意味します。

したがって、上記のコマンドはに変換!#:3され~/bin/ackます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.