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-15si 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 FooEntréeecho !$ JarEntrez Haut Entrez ; et -
echo FooEntrezecho $_ JarEntrez 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.
echoquelque 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.