Ответ 1
Это последний аргумент предыдущей команды. Из документации:
!!:$
обозначает последний аргумент предыдущей команды. Это может быть сокращено до
!$
.
Примечание. Если вы хотите поиграть с историей Bash, я предлагаю вам включить параметр оболочки histverify
следующим образом:
shopt -s histverify
(вы также можете поместить его в свой .bashrc
, чтобы он был включен). При использовании замены истории замена не выполняется немедленно; вместо этого он помещается в буфер чтения, ожидая нажатия клавиши ввода... или нет!
Чтобы сделать что-то точным, набрав !$
не эквивалентно типу "$_"
: !$
- это действительно замена истории, ссылающаяся на последнее слово предыдущей команды, которая была введена, тогда как "$_"
является последним аргумент ранее выполненной команды. Вы можете сравнить оба (у меня есть shopt -s histverify
):
$ { echo zee; }
zee
$ echo "$_"
zee
$ { echo zee; }
zee
$ echo !$
$ echo }
также:
$ if true; then echo one; else echo two; fi
one
$ echo "$_"
one
$ if true; then echo one; else echo two; fi
$ echo !$
$ echo fi
А также:
$ echo zee; echo "$_"
zee
zee
$ echo zee2; echo !$
$ echo zee2; echo "$_"
А также
$ echo {1..3}
1 2 3
$ echo "$_"
3
$ echo {1..3}
1 2 3
$ echo !$
$ echo {1..3}
А также
$ echo one ;
$ echo "$_"
one
$ echo one ;
one
$ echo !$
$ echo ;
Есть много других примеров, например, с псевдонимами.