Bashの履歴展開

csnl
2 min readMar 22, 2016

--

自分用のメモ。だいたいBashのman pageの翻訳。

Zshでも基本的に使えるがエラー時の挙動が違うときがある。

イベント指示子

これがあればとりあえず動く。

!n
# nで指定したコマンド履歴を呼び出す。nは自然数。履歴のhistoryコマンド。
!-n
# n個前のコマンド履歴を呼び出す。nは自然数。
!!
# 直前のコマンド履歴を呼び出す。'!-1'と同義。
!string
# stringから始まる直近のコマンド履歴を呼び出す。
!?string?
# stringを含む直近のコマンド履歴を呼び出す。
# string の直後が改行文字ならば最後の?は省略可。
^string1^string2^
# 直前のコマンドに含まれるstring1string2に置換したうえで再実行。
# '!!:s/string1/string2/'と同義。
!#
# コマンドラインの行頭から"!#"までの入力。
# 説明しづらいので以下の例を参照。
$ echo aaa !# bbb
aaa echo aaa bbb
$ echo aaa !# bbb !# ccc
aaa echo aaa bbb echo aaa echo aaa bbb ccc

単語指示子

イベント指示子直後に”:”をつけ、さらに単語指示子をつけることで、コマンド履歴の特定の引数を再利用できる。”^, $, *, -, %”については”:”を省略可。

0
# 数字の0。コマンドそのもの。
n
# nは自然数。n番目の引数。
^
# 最初の引数。1と同義。
$
# 最後の引数。
%
# 直近に実行した'!?string?'の履歴から実際にstringを含む引数を再利用する
# '!?string?:%'という使い方くらいしか思いつかない。
x-y
# x,yは0以上の整数、あるいは^、あるいは$。指定範囲の引数の全て。
# "0-y"は"-y"に省略可。
*
# 0番目(コマンドそのもの)を除く全引数。"1-$"と同義。
# 引数が無い履歴にこの指示子を使うと、Bashでは空文字列、Zshではエラーが返る。
x*
# xは0以上の整数。"x-$"と同義。
x-
# xは0以上の整数。"x-$"から最後の引数を除外したもの。

--

--