May 15, 2022

History Expansionを深く知ると便利そう

History Expansionとは

履歴(History)の情報を拡張するための機能です。

2つの要素で構成されています。

  1. Event Designators(イベント指定子): どの履歴を取るのかを指定する要素。(取得された履歴は「イベント」と呼ばれます。)
  2. Word Designators (文字指定子): どのようにその履歴の情報を取るのかを指定する要素

1. Event Designators (イベント指定子)

以下のような履歴があるとします。

1 echo "hello world"
2 echo "I'm sleepy"
3 echo "Good night"

Event Designatorsはどの履歴を取るのかを指定します。便利な指定子は以下の通りです。

  • !n: n番の履歴
    • !1echo "hello world"が実行されます。
  • !!: 直前の履歴
    • echo "Good night"が実行されます。

2. Word Designators (文字指定子)

先程のEvent Designatorsでイベントが取得できたと思います。!!で指定したイベントは以下のようなものです。

echo "Good night"

このイベントに対して文字指定子を指定することによって、情報を抜き取ることができます。便利な識別子は以下のとおりです。

  • *は2つ目の引数以降を取得します。
    • !!:*"Good night"になります。

3. Modifiers

これはどのようにイベントから取ってきた情報を使うのかを指定するものです。便利なモディファイアは以下の通りです。

  • p: 表示をするだけでコマンドを実行しません。
    • !!:pecho "hoho"を表示します。今までのように実行しません。
  • s/old/new/: sedのように置換します。
    • !!:s/night/morning/echo "Good morningが実行されます。

注意

ただし、これはinteractive shellだけで使える機能なのでスクリプトに書いて実行しても使えません…

参考文献

© KeisukeYamashita 2023