History Expansionとは
履歴(History)の情報を拡張するための機能です。
2つの要素で構成されています。
Event Designators
(イベント指定子): どの履歴を取るのかを指定する要素。(取得された履歴は「イベント」と呼ばれます。)Word Designators
(文字指定子): どのようにその履歴の情報を取るのかを指定する要素
1. Event Designators (イベント指定子)
以下のような履歴があるとします。
1 echo "hello world"
2 echo "I'm sleepy"
3 echo "Good night"
Event Designatorsはどの履歴を取るのかを指定します。便利な指定子は以下の通りです。
!n
:n
番の履歴!1
はecho "hello world"
が実行されます。
!!
: 直前の履歴echo "Good night"
が実行されます。
2. Word Designators (文字指定子)
先程のEvent Designatorsでイベントが取得できたと思います。!!
で指定したイベントは以下のようなものです。
echo "Good night"
このイベントに対して文字指定子を指定することによって、情報を抜き取ることができます。便利な識別子は以下のとおりです。
*
は2つ目の引数以降を取得します。!!:*
は"Good night"
になります。
3. Modifiers
これはどのようにイベントから取ってきた情報を使うのかを指定するものです。便利なモディファイアは以下の通りです。
p
: 表示をするだけでコマンドを実行しません。!!:p
はecho "hoho"
を表示します。今までのように実行しません。
s/old/new/
:sed
のように置換します。!!:s/night/morning/
はecho "Good morning
が実行されます。
注意
ただし、これはinteractive shellだけで使える機能なのでスクリプトに書いて実行しても使えません…