Що означає! #: 3 означає команду shell


29

Посібник з установки ack пропонує встановити сценарій ack за допомогою цієї команди:

curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3 

Я припускаю, що !#:3в кінці є якесь зворотне посилання, але що це означає? Чи є еквівалент в zsh? Google не допомагає.


5
Припускаючи баш; man bash, тоді шукайте ІСТОРІЙНЕ РОЗШИРЕННЯ
Jeff Schaller

1
Це означає, що мій кіт ходив по клавіатурі в дуже поганий час.
IQAndreas

@IQAndreas: Ну, це дійсна команда, тому ваша кішка повинна бути досить розумною, щоб перемогти детектор набору тексту . Ясна річ, що це не марний кіт. :-) ⁠
G-Man каже: "Відновити Моніку"

Відповіді:


32

Це особливий синтаксис, розширений bash. Він також працює для zsh.

Згідно зі сторінкою bash man (розділ ІСТОРІЙНЕ РОЗШИРЕННЯ), шаблон розширюється наступним чином:

  • Цілевказувач події !# відноситься до всієї командної рядку набраної до сих пір , якаcurl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
  • :розбивається між позначувачем події (у цьому випадку весь рядок) та словом позначення (вибирає підрозділ)
  • слово умовне позначення 3 , яке вибирає третій слово / аргумент (підрахунку слів починається з нуля), в цьому випадку ~/bin/ack.

В останній командного рядка (зазвичай відображається перед страчені) є: curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ack.

Докладніше див. Посібник з bash або дуже подібний посібник zsh


7
Не можу не задатися питанням: хто думав, що ця функція коли-небудь стане гарною ідеєю?
Римоїд

3
@Rhymoid, я не використовую !#багато, але !!, !$, !*, !sud:pі багато інших все надзвичайно корисні , і я використовую їх весь час. Перевірте unix.stackexchange.com/a/67/135943
Wildcard

11

В bash, це підміна історії (всі заміни історії починаються з !). Зокрема, !#означає все до цього часу в командному рядку, а додавання ': 3' означає третє слово (починаючи рахувати з 0).

Отже, наведена вище команда перекладається !#:3на ~/bin/ack.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.