最新のコマンドの最初の引数を置き換える方法は?

最新のコマンドの最初の引数を置き換える方法は?

端末でこのようなコマンドを実行すると、

$ tyop --count 3 --exact haveibeenpwned

このコマンドは、次のエラーコードを返します。

command not found: tyop

コマンドライン引数を--count 3 --exact haveibeenpwned別のコマンド名(たとえばtypo代わり​​にtyop)に保ちながら最後のコマンドを再実行するにはどうすればよいですか?

$ typo --count 3 --exact haveibeenpwned

!!可能であれば、またはなどのショートカットキーまたはシェル機能を探しています!^

答え1

typo !*

~からman bash:

Word Designators
   Word designators are used to select desired words from the event.  A :
   separates the event specification from the word designator.  It may be
   omitted if the word designator begins with a ^, $, *, -, or %.  Words
   are numbered from the beginning of the line, with the first word being
   denoted by 0 (zero).  Words are inserted into the current line
   separated by single spaces.

   *      All of the words but the zeroth.  This is a synonym for `1-$'.
          It is not an error to use * if there is just one word in the
          event; the empty string is returned in that case.

答え2

上矢印を押して入力行を手動で編集するなど、明らかなものに加えてGNUリードライン(および他の多くのプログラムで使用されていますbash)には、いくつかの便利な履歴編集機能が組み込まれています。 !*他の答えで述べたように、それはその一つです。

別の方法は、文字列置換機能を使用することです^。からman bash

^string1^string2^

迅速な交換。前のコマンドを繰り返して、string1を
string2に置き換えます。 (以下の修飾子を参照)と同じです!!:s^string1^string2^

^tyop^typo^この機能を使用すると、Enter を入力して押してコマンドを変更できます。

Bashの歴史を通してできることははるかに多いです。実行しman bashて検索して、HISTORY EXPANSIONこのセクションとすべてのサブセクション(Event Designators、、Word DesignatorsおよびModifiers)を読んでください。

ちなみに、タイトル付きのセクションを読んだり、少なくともREADLINEそれが何をしているのかをおおよそのアイデアを得るために見ることも価値があります。 readline の完全なドキュメントは以下にあります。https://tiswww.cwru.edu/php/chet/readline/rltop.htmlそしてhttps://tiswww.cwru.edu/php/chet/readline/readline.html

答え3

この!$変数は、前のコマンドの最後のパラメータを保存します。

例:

touch hello
cat !$ #equivalent to "cat hello" 

!*$_すべてのパラメータを保存します。

詳細と代替コマンドを含む同様の質問ここ

関連情報