以前に入力したパラメータを参照するための bash マジックはありますか?

以前に入力したパラメータを参照するための bash マジックはありますか?

この質問は、以前に質問された bash コンソールで現在入力されているパラメータを繰り返すにはどうすればいいですか?


多くの場合、シェル内でファイル名を少し変更したいことがあります。例:

$ mv test_1.py _test_1.py

または

$ mv test_1.py test_1.py.org

私は以下の提案を活用できるbash コンソールで現在入力されているパラメータを繰り返すにはどうすればいいですか?、 しかし

何かありますかバッシュマジックこれによって、以前に入力したパラメータを参照できるようになりますか?

たとえば、魔法が$M,次のようになる場合、上記のように次のようにします。

$ mv test_1.py _$M.py
$ mv test_1.py $M.org

答え1

魔法は2つの部分で機能します。

まず、echo は e にエイリアスされます (エイリアスが不要な場合でも echo は機能します)。次に、「中括弧展開」を使用します。

$ e mv {,_}test_1.py              # Try to see if it works as expected.
mv test_1.py _test_1.py

          # If the arguments are what you want:

$ mv {,_}test_1.py                # Press ↑ (up arrow), remove `e`

$ !*                              # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py                # If `histverify` is set.

!*はスペースで拡張できます。マジックスペースを有効にするまたは、セットshopt -s histverifyEnter キーを押した後、Enter キーを(もう一度)押して実行する前に、履歴拡張の効果を確認する機会が与えられます。

他の例:

$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org        # The result of the brace expansion.
                                  # Review it, and if it is ok:
$ !*                              # type !* (use either space or enter)
                                  # That will depend on how you setup it.

$ mv test_1.py{,.org}        # The command appear again (enter to execute).
$

の履歴展開もあり、!#これはこれまでに入力したコマンド ラインを意味し、最初のコマンドを選択します:1。マジック スペースが有効になっている場合は、入力してmv test1.py !#:1スペース キーを押すと、コマンドが変更されます。

$ mv test_1.py !#:1                # Press space.
$ mv test_1.py test_1.py           # The command line change to this.
$ mv test_1.py test_1.org          # Edit and press enter to execute.

関連情報