Fondamentalement, c'est le dernier argument de la commande précédente.
!$
est la "fin" de la commande précédente. Prenons l'exemple suivant: Nous commençons par rechercher un mot dans un fichier:
grep -i joe /some/long/directory/structure/user-lists/list-15
si Joe est dans cette liste d'utilisateurs, nous voulons le supprimer. Nous pouvons soit lancer vi avec cette longue arborescence de répertoires en tant qu'argument, soit aussi simplement que vi !$
Which bash se développe:
vi /some/long/directory/structure/user-lists/list-15
( source ; guide pratique, en passant)
La distinction entre ce !$
jeton et la variable shell spéciale ne vaut rien $_
. En effet, les deux développent le dernier argument de la commande précédente. Toutefois, !$
est étendu lors de l’extension de l’historique , tandis que $_
lors de l’ expansion des paramètres . Une conséquence importante de cela est que, lorsque vous utilisez !$
la commande développée, elle est enregistrée dans votre historique.
Par exemple, considérons les frappes au clavier
(Les seuls caractères modifiés sont le $!
et $_
au milieu.)
Dans le premier cas, lorsque vous appuyez sur Up, la ligne de commande echo Foo Jar
est lue Foo Jar
. La dernière ligne écrite sur stdout est donc .
Dans ce dernier cas, lorsque vous appuyez sur Up, la ligne de commande lit echo $_ bar
, mais a maintenant $_
une valeur différente de celle utilisée précédemment. En fait, $_
c'est maintenant Jar
, donc la dernière ligne écrite dans stdout est Jar Jar
.
Une autre conséquence est qu’il _
peut être utilisé dans d’autres développements de paramètres, par exemple la séquence de commandes
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
impressions isomorphism isosceles
. Mais il n'y a pas " ${!$%morphism}
" d'expansion analogue .
Pour plus d'informations sur les phases d'expansion dans Bash, voir la EXPANSION
section de man 1 bash
(cela s'appelle Shell Expansions dans l'édition en ligne). La HISTORY EXPANSION
section est séparée.
echo
quelque chose si vous n'êtes pas sûr de ce que ça va faire.