GNU/Linux >> Tutoriels Linux >  >> Linux

$_ Vs !$. Dernier argument de la commande précédente et redirection de sortie ?

La question porte sur des variables spéciales. La documentation indique :

!!:$

désigne le dernier argument de la commande précédente . Cela peut
être raccourci en !$ .

($_ , un trait de soulignement.) Au démarrage du shell, définissez le chemin d'accès absolu utilisé pour invoquer le shell ou le script shell en cours d'exécution tel qu'il est transmis dans l'environnement ou la liste d'arguments. Par la suite, développe le dernier argument de la commande précédente après agrandissement. Également défini sur le chemin d'accès complet utilisé pour appeler chaque commande exécutée et placée dans l'environnement
exporté vers cette commande.

Il doit y avoir une différence que je ne peux pas saisir, car :

$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt

$ echo "hello" > /tmp/a.txt
$ echo $_
hello

Quelle est la différence ?

Réponse acceptée :

!$ est un indicateur de mot de l'expansion de l'historique, il s'étend jusqu'au dernier mot de la commande précédente dans history . IOW, le dernier mot de l'entrée précédente dans l'histoire. Ce mot est généralement le dernier argument de la commande, mais pas en cas de redirection. Dans :

echo "hello" > /tmp/a.txt

toute la commande 'echo "hello" > /tmp/a.txt' apparu dans l'historique, et /tmp/a.txt est le dernier mot de cette commande.

_ est un paramètre shell, il se développe jusqu'au dernier argument de la commande précédente. Ici, la redirection ne fait pas partie des arguments passés à la commande, donc seulement hello est l'argument passé à echo . C'est pourquoi $_ étendu à hello .

_ n'est plus l'un des paramètres spéciaux standard du shell. Cela fonctionne dans bash , zsh , mksh et dash uniquement lorsqu'il est interactif, ksh93 uniquement lorsque deux commandes sont sur des lignes séparées :

$ echo 1 && echo $_
1
/usr/bin/ksh

$ echo 1
1
$ echo $_
1

Linux
  1. Utilisation de l'entrée-sortie et de la redirection d'erreur sous Linux

  2. Passer la sortie de la commande précédente à la suivante en tant qu'argument ?

  3. Sortie de la "dernière" commande ?

  4. Obtenez les 4 derniers caractères de la sortie de la sortie standard

  5. Les barres obliques et la commande rsync

Prettyping - Rendre la sortie de la commande Ping plus jolie et plus facile à lire

Comment capturer les sessions de terminal et la sortie avec la commande de script Linux

Comment changer la couleur de sortie de 'Echo' sous Linux

Explication :Redirection des entrées, des sorties et des erreurs sous Linux

Exemples de commandes echo Linux

Comment ajouter la sortie à un fichier ?