O guia de instalação do ack sugere a instalação do script ack usando este comando:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3
Suponho que !#:3
no final seja algum tipo de referência posterior, mas o que isso significa? Existe um equivalente no zsh? O Google não foi útil.
bash
command-history
Matt Pfefferle
fonte
fonte
man bash
e procure por HISTORY EXPANSIONRespostas:
Essa é uma sintaxe especial, expandida pelo bash. Também funciona para o zsh.
De acordo com a página do manual do bash (seção HISTORY EXPANSION), o padrão se expande da seguinte forma:
!#
refere-se a toda a linha de comando digitada até o momento, que écurl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
:
divide entre o designador de eventos (neste caso, a linha inteira) e o designador de palavras (seleciona uma sub-parte)3
que seleciona a terceira palavra / argumento (a contagem de palavras começa em zero), neste caso~/bin/ack
.A linha de comando final (geralmente exibido antes executado) é:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
.Para detalhes, consulte o manual do bash ou muito semelhante ao manual do zsh
fonte
!#
muito, mas!!
,!$
,!*
,!sud:p
e muitos outros são todos extremamente útil e eu usá-los o tempo todo. Confira unix.stackexchange.com/a/67/135943Em
bash
, é a substituição do histórico (todas as substituições do histórico começam com!
). Especificamente,!#
significa tudo na linha de comando até agora, e a adição ': 3' significa a terceira palavra (contagem inicial em 0).Portanto, o comando acima se traduz
!#:3
em~/bin/ack
.fonte