!-n
と!$
は習ったしよく聞くけど、!-n$
とかできないかなーできたらいいなーでも聞いたことないし、そんなニッチ(?)なのないかなーって思ってたけど、
試しにやってみたらできたよ!!!
ちゃんとした説明
bashの組み込みコマンドhistory
に付随する機能として、
以下は割と有名で説明されてる記事も多いかと思います。
-
!-n
で「n回前の実行履歴」を参照できる(例:!-2
で2回前) -
!$
で「直前の実行履歴の最後の引数」を参照できる-
$
の代わりに^
で最初の引数を参照できる -
$
の代わりに*
ですべての引数を参照できる
-
この2つを合わせた感じで、
!-n$
で「n回前の実行履歴の最後の引数」を参照することもできるのです!!!
例:
$ echo hoge0
hoge0
$ echo hoge1
hoge1
$ !-2 # 2回前のコマンドを実行
echo hoge0
hoge0
$ echo hoge2
hoge2
$ echo !$ # 直前のコマンドの最後の引数を参照
echo hoge2
hoge2
$ echo hoge3
hoge3
$ echo !-2$ # 2回前のコマンドの最後の引数を参照
echo hoge2
hoge2
これを機会にman bash
を読んでみたよ
-
!-n:x
で「n回前の実行履歴のx番目の引数」を参照できる -
!-n:x-y
で「n回前の実行履歴のx番目からy番目の引数」を参照できる -
!-n:0
で「n回前の実行履歴のコマンド(引数なしのコマンド名単体、ということ)」を参照できる - 【重要】 最後に
:p
をつけると展開結果が表示されて、かつ最新の履歴に追加されるので、 確認してから!!
や上矢印で 実行することができる
構文としては、以下のようになっています。
! {実行履歴(event)指定部} [ : {参照対象(word)指定部} ] [ : {修飾部} ]
- 参照対象指定部が記号系だと区切り文字の
:
が省略できる- その結果、
!-n$
で「n回前の実行履歴の最後の引数」ということになる
- その結果、
- 実行履歴指定部を省略すると直前の実行履歴が対象となる
- その結果、
!$
で「直前の実行履歴の最後の引数」ということになる
- その結果、
おわりに
- 「こんなん常識じゃん┐(´ー`)┌ 」と思っても、1年前まではwinサーバー向けに開発していた者ですのでお許しください
- 記号系がぐぐらびりてぃが低いのが悪い()
-
man bash
を読むのは大変だけど、history
以外の部分も勉強になりました
参考
-
シェルのコマンド履歴から再利用、のいろいろ - 元RX-7乗りの適当な日々
- 古い記事ですが、各記法・各オプションの日本語版が掲載されています
- 本記事で紹介したもの以外にもたくさん機能があるので1回くらいは目を通してみるといいかもしれません
!#
については別途記事にしました
→【bash】ヒストリ機能での!#
の使い途