it-swarm-ja.com

bashの前のコマンドから特定の引数を取得するにはどうすればよいですか?

Bashでは、!*を使用して、前のコマンドからすべての引数を取得できます。例として、cp /some/path /some/other/pathを実行してからmv !*を実行した場合、2番目のコマンドはmv /some/path /some/other/pathに展開されます。

すべてではなく、コマンドから特定の引数にアクセスするために使用できるこのようなものはありますか?

31
Wuffers

!*では、!履歴拡張 プレフィックスであり、*単語指定子 であり、すべての引数を意味します。一般的な構文は、bang-line-colon-column(!line:column)として記憶できます。可能なショートカットはたくさんあります。デフォルトの行は前の行、デフォルトの列指定子は「all」です。列指定子が数値でない場合はコロンを省略できます(ただし、!3は3行目を意味します)。 。 !:0を使用してコマンド名を参照し、!:1!:2などを使用して、連続する引数を参照できます。!:$最後の単語を参照します。!:*すべての引数などについて。

Michael Mrozekによるこの投稿 at nix Stack Exchange も参照してください。

個人的には、インタラクティブシェルでecho "Hello World!"を試してみると邪魔になるこの「感嘆符付きの拡張」機能が本当に嫌いです(したがって、非インタラクティブモードで実行されることを前提としたソーシングスクリプトはまったく機能しません) 。

そこで、set +o histexpandを設定し、次のメソッドで引数の呼び出しを開始します。

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

Esc-trickは、メタキーがないためです。

4
Benoit