Есть ли магия 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

Магия работает в два этапа.

Во-первых, 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 histverifyПосле нажатия Enter вам будет предоставлена ​​возможность просмотреть эффект расширения истории, прежде чем нажать 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. Если у вас включен magic-space, вы вводите 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.

Связанный контент