Bang dollar semble se référer à la dernière partie de la dernière ligne de commande.
Par exemple.
$ ls -l
.... something
$ !$
-l
bash: -l command not found
Je peux trouver beaucoup sur les variables en dollars (par exemple $!
) mais pas là-dessus. Une explication?
C'est le dernier argument de la commande précédente. De la documentation :
!!:$
désigne le dernier argument de la commande précédente. Cela peut être raccourci à
!$
.
Remarque. Si vous voulez jouer avec l'historique de Bash, je vous suggère d'activer l'option Shell histverify
comme ceci:
shopt -s histverify
(vous pouvez également le mettre dans votre .bashrc
pour l'avoir en permanence). Lorsque vous utilisez la substitution d'historique, la substitution n'est pas exécutée immédiatement; à la place, il est placé dans le tampon de readline, en attendant que vous appuyiez sur Entrée… ou pas!
Pour être plus précis, saisissez !$
n'est pas équivalent à taper "$_"
: !$
est vraiment une substitution d'historique, faisant référence au dernier mot de la commande précédente qui a été entrée, tandis que "$_"
est le dernier argument de la commande précédente exécutée. Vous pouvez comparer les deux (j'ai shopt -s histverify
):
$ { echo zee; }
zee
$ echo "$_"
zee
$ { echo zee; }
zee
$ echo !$
$ echo }
Aussi:
$ if true; then echo one; else echo two; fi
one
$ echo "$_"
one
$ if true; then echo one; else echo two; fi
$ echo !$
$ echo fi
Et aussi:
$ echo zee; echo "$_"
zee
zee
$ echo zee2; echo !$
$ echo zee2; echo "$_"
Et aussi
$ echo {1..3}
1 2 3
$ echo "$_"
3
$ echo {1..3}
1 2 3
$ echo !$
$ echo {1..3}
Et aussi
$ echo one ;
$ echo "$_"
one
$ echo one ;
one
$ echo !$
$ echo ;
Il existe de nombreux autres exemples, par exemple, avec des alias.
!$
peut faire quoi $_
le fait, sauf que $_
ne stocke pas la valeur qu'elle renvoie (comme substitution) dans history
.
Voici un exemple.
Avec !$
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
Avec $_
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$
Plus d'options:
!^ 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
Réponse de singe:
whit! $ vous pouvez facilement imprimer le dernier mot du commande précédente
#Create new file
touch newfile.txt
#Edit new file using !$ instead newfile.txt again
nano !$