Взрывный доллар, похоже, относится к последней части последней командной строки.
например.
$ ls -l
.... something
$ !$
-l
bash: -l command not found
Я могу найти много на долларовых переменных (например, $!
), но не на этом. Любое объяснение?
Взрывный доллар, похоже, относится к последней части последней командной строки.
например.
$ ls -l
.... something
$ !$
-l
bash: -l command not found
Я могу найти много на долларовых переменных (например, $!
), но не на этом. Любое объяснение?
Это последний аргумент предыдущей команды. Из документации:
!!:$
обозначает последний аргумент предыдущей команды. Это может быть сокращено до
!$
.
Примечание. Если вы хотите поиграть с историей 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 ;
Есть много других примеров, например, с псевдонимами.
!$
может делать то, что $_
делает, за исключением того факта, что $_
не сохраняет значение, которое он возвращает "это substitution"
в истории.
Вот пример.
С !$
za:tmep za$ ls -lad
drwxr-xr-x 4 za staff 136 Apr 6 2016 .
za:tmep za$ !$
-lad
-bash: -lad: command not found
za:tmep za$ history | tail -n 3
660 ls -lad
661 -lad <<== history shows !$ substitution.
662 history | tail -n 3
С $_
za:tmep za$ ls -lad
drwxr-xr-x 4 za staff 136 Apr 6 2016 .
za:tmep za$ $_
-bash: -lad: command not found
za:tmep za$ history | tail -n 3
663 ls -lad
664 $_ <<== history shows $_ and not its substitution.
665 history | tail -n 3
za:tmep za$
Дополнительные параметры:
!^ first argument
!:2 second argument
!:2-$ second to last arguments
!:2* second to last arguments
!:2- second to next to last arguments
!:2-3 second to third arguments
!$ last argument
!* all arguments