Je suis en train de suivre un tutoriel et il mentionne dexécuter cette commande:
sudo chmod 700 !$
Je « ne suis pas familier avec !$
. Quest-ce que cela signifie?
Commentaires
Réponse
En gros, il « est le dernier argument de la commande précédente.
!$
est la » fin « de la commande précédente Prenons lexemple suivant: Nous commençons par chercher un mot dans un fichier:grep -i joe /some/long/directory/structure/user-lists/list-15
si Joe est dans cette liste dutilisateurs, nous voulons lenlever . Nous pouvons soit lancer vi avec cette longue arborescence de répertoires comme argument, soit aussi simplement que
vi !$
Quelle bash se développe en:vi /some/long/directory/structure/user-lists/list-15
( source ; guide pratique, au fait)
La distinction entre ce jeton !$
et la variable shell spéciale $_
ne vaut rien . En effet, les deux sétendent jusquau dernier argument de la commande précédente. Cependant, !$
est développé pendant lexpansion de lhistorique , tandis que $_
est développé pendant lexpansion des paramètres . Une conséquence importante de ceci est que, lorsque vous utilisez !$
, la commande développée est enregistrée dans votre historique.
Par exemple, considérez les frappes au clavier
-
echo Foo
Entréeecho !$ Jar
Entrez Haut Entrez ; et -
echo Foo
Entrezecho $_ Jar
Entrez Haut Entrez.
(Les seuls caractères modifiés sont les $!
et $_
au milieu.)
Dans le premier, lorsque vous appuyez sur Haut , la ligne de commande lit echo Foo Jar
, donc la dernière ligne écrite dans stdout est Foo Jar
.
Dans ce dernier, lorsque vous appuyez sur Up , la ligne de commande lit echo $_ bar
, mais maintenant $_
a une valeur différente de ce quelle faisait auparavant – en effet, $_
est désormais Jar
, donc la dernière ligne écrite dans stdout est Jar Jar
.
Une autre conséquence est que _
peut être utilisé dans dautres extensions de paramètres, par exemple, la séquence de commandes
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles
affiche isomorphism isosceles
. Mais il « ny a pas dexpansion analogue » ${!$%morphism}
« .
Pour plus dinformations sur les phases dexpansion dans Bash, consultez le EXPANSION
section de man 1 bash
(cela sappelle Expansions Shell dans lédition en ligne). Les HISTORY EXPANSION
La section est séparée.
Commentaires
- Bien. Bon à savoir. Aussi, bonne chose là ' s Stack Exchange. Il est ' difficile de rechercher sur Google quelque chose comme
!$
- BTW, sur la ligne de commande, vous pouvez insérer le dernier argument de la commande précédente par
insert-last-argument
, généralement lié àM-.
. - @Andrew, noubliez pas daccepter ceci si cela répond à votre question. Accepter et voter plutôt que publier des commentaires est la façon dont les remerciements sont exprimés sur le réseau SE, voir ici pour le " position officielle ".
- @Andrew FYI, jai cherché sur Google " bash bang dollar " et jai obtenu des résultats décents, y compris ce lien comme troisième liste.
- @terdon Jai essayé daccepter la réponse hier soir, mais cétait tellement rapide que jai été forcé dattendre pour laccepter.
Réponse
Strictement parlant !$
est le dernier mot de la dernière commande de la liste dhistorique.
mot – Une séquence de caractères traités comme une unité par le shell. Les mots ne peuvent pas inclure de métacaractères sans guillemets.
metacharacter – Un caractère qui, lorsquil nest pas entre guillemets, sépare les mots. Un méta-caractère est un blanc ou lun des caractères suivants: |, &, ;, (, ), < , ou >
vide – Un espace ou une tabulation.
Exemples:
set -o history # enable command history set -o histexpand # enable ! style history substitution HISTSIZE=10 # save all lines on the history list HISTCONTROL= HISTIGNORE= date echo !$ # prints date date>/dev/null echo !$ # prints /dev/null echo a b c>/dev/null echo !$ # prints /dev/null HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list echo a b c echo d e f # space at the beginning echo !$ # prints c
Commentaires
Réponse
!$
vous donnera la dernière commande utilisée pour cet utilisateur particulier ….
vous pouvez également trouver lhistorique des commandes utilisées précédemment en utilisant la commande history
… essayez-le ….
REMARQUE: Pour un utilisateur particulier, toutes les commandes utilisées précédemment seront stockées dans le fichier dhistorique de bash.
Commentaires
- Les autres réponses sont justes. Celui-ci est faux.
echo
quelque chose si vous ' nêtes pas sûr de ce quil ' fera.echo $(rm -rf /)
--no-preserve-root
, et si vous voyez les mots " pas de conserve " dans un programme, il vaut mieux réfléchir sérieusement à ce quil fait.