Je suis sur un tutoriel et il mentionne cette commande:
Sudo chmod 700 !$
Je ne connais pas avec !$
. Qu'est-ce que ça veut dire?
Fondamentalement, c'est le dernier argument de la commande précédente.
!$
est la "fin" de la commande précédente. Considérez l'exemple 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 d'utilisateurs, nous voulons l'enlever de cela. Nous pouvons tirer parti de VI avec cet arbre de répertoire à long terme comme argument ou comme simplement
vi !$
Quelle bash se développe:vi /some/long/directory/structure/user-lists/list-15
(- source ; guide pratique, au fait)
Cela ne vaut rien de la distinction entre cette !$
jeton et la variable spéciale de la coque $_
. En effet, les deux Développer au dernier argument de la commande précédente. Pourtant, !$
est élargi pendant expansion de l'historique, tandis que $_
est développé pendant expansion des paramètres. Une conséquence importante en est que, lorsque vous utilisez !$
, le développé La commande est enregistrée dans votre historique.
Par exemple, considérons les frappes de frappe
echo Foo
Enterecho !$ Jar
EnterUpEnter; et
echo Foo
Enterecho $_ Jar
EnterUpEnter.
(Les seuls caractères ont changé sont les $!
et $_
au milieu.)
Dans le premier, quand vous appuyez sur Up, la ligne de commande lit echo Foo Jar
, la dernière ligne écrite sur 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 égale à ce qu'elle n'a fait précédemment, $_
est maintenant Jar
, la dernière ligne écrite sur stdout est Jar Jar
.
Une autre conséquence est que _
peut être utilisé dans d'autres extensions de paramètres, par exemple la séquence de commandes
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
prints isomorphism isosceles
. Mais il n'y a pas d'analogue "${!$%morphism}
"Expansion.
Pour plus d'informations sur les phases de l'expansion à bash, voir la section EXPANSION
de man 1 bash
(Ceci s'appelle Expansions Shell dans l'édition en ligne). Le HISTORY EXPANSION
la section est séparée.
À proprement parler !$
est le dernier mot de la dernière commande de la liste d'historique.
Mot - une séquence de caractères traitées comme une unité par la coque. Les mots ne peuvent pas inclure des métacaracters non cotés.
metacharacter - un personnage qui, quand il est incontournable, sépare les mots. Un métacaracter est un blanc ou l'un des caractères suivants: '|', '&', ';'; ',' (',') '', '<', ou '>'
blanc - un espace ou un caractère d'onglet.
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