Le guide d'installation pour ack suggère d'installer le script ack à l'aide de cette commande:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3
Je suppose que la !#:3
fin est une sorte de référence arrière, mais qu'est-ce que cela signifie? Existe-t-il un équivalent dans zsh? Google n'a pas été utile.
bash
command-history
Matt Pfefferle
la source
la source
man bash
, puis recherchez EXPANSION D'HISTOIRERéponses:
Il s'agit d'une syntaxe spéciale, développée par bash. Cela fonctionne également pour zsh.
Selon la page de manuel bash (section HISTORY EXPANSION), le modèle se développe comme suit:
!#
fait référence à la ligne de commande entière tapée jusqu'à présent, qui estcurl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
:
se divise entre l' indicateur d'événement (dans ce cas, la ligne entière) et le mot désignateur (sélectionne une sous-partie)3
qui sélectionne le troisième mot / argument (le comptage des mots commence à zéro), dans ce cas~/bin/ack
.La ligne de commande finale (généralement affiché avant exécuté) est:
curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
.Pour plus de détails, consultez le manuel bash ou très similaire au manuel zsh
la source
!#
beaucoup, mais!!
,!$
,!*
,!sud:p
et bien d' autres sont tous très utiles et je les utilise tout le temps. Consultez unix.stackexchange.com/a/67/135943Dans
bash
, c'est la substitution d'historique (toutes les substitutions d'historique commencent par!
). Plus précisément,!#
signifie tout ce qui se trouve sur la ligne de commande jusqu'à présent, et l'addition «: 3» signifie le troisième mot (départ à 0).Ainsi, la commande ci-dessus se traduit
!#:3
par~/bin/ack
.la source