で始まる最後のターミナル コマンドを実行するエイリアスを zsh で作成したいと思います。node
そのコマンドは で実行できます!?node
が、 でエイリアスを作成することはできませんalias N='!?node'
。このエイリアスを作成するにはどうすればよいでしょうか。
答え1
履歴の展開はコマンドラインで実行されます前にエイリアス拡張したがって、エイリアスに履歴拡張を入れても機能しません。エイリアスが拡張された後は、それ以上の履歴拡張は実行されないためです。
一方、パラメータ拡張は実行される後エイリアス拡張。代わりにこれを使用できます:
alias N='"${(z)history[(r)node *]}"'
(r)
その後に最初に出現するパターンを取得しますこの場合、最も最近に一致する履歴項目が取得されます。$history
常に新しいものから古いものの順に並べられます。(z)
文字列をコードとして解析し、結果として得られるシェルワードを返します。それ以外の場合、拡張全体が 1 つの単語として扱われます。- スペースを正しく解析するには二重引用符が必要です。そうしないと、単語の区切りとして扱われ、構文エラーが発生します
"
。"
- 一
'
重引用符は、'
パラメータの展開が宣言時にすぐに実行されるのを防ぐために必要です。