Unix tcsh - alias en utilisant argument de ligne de commande $1/\!:1
Dans Unix (tcsh), j'ai référencé arguments de ligne de commande dans mon alias avec deux notations différentes - $1
et \!:1
.
Mais j'ai remarqué que si j'essaie d'enregistrer $1
à une variable d'environnement, il n'est pas enregistré. Cependant \!:1
est sauvé.
alias hear 'setenv x \!:1 && echo $x'
--> hear that
that
--> echo $x
that
alias oh 'setenv x $1 && echo $x'
--> oh no
no
--> echo $x
Rien ne s'affiche sur l'echo de $x $1 est utilisé pour stocker la valeur. Quelle est la raison?
Vous devez vous connecter pour publier un commentaire.
$1
retourne le premier argument passé pour le script qui contient lealias
de commande. Donc, si vous appelez à partir de la ligne de commande, il sera de retour rien.\!:1
retourne le premier argument passé à un alias de commande, de sorte que c'est clairement ce que vous devriez être en utilisant.supergra a répondu le premier point, mais il peut vous amener à vous demander pourquoi vous voyez votre texte en écho à vous, même si la variable n'a pas été définie. C'est, vous avez
echo $x
à la fin de votre pseudo, et en effet vous voirno
lorsque vous entrezoh no
, mais cela ne signifie pas que l'écho en écho à la variable.Ce qui s'y passe, c'est que
echo
est en cours d'impression (vide) variable, maisecho
est aussi attraper le "non" de la partie séparément. Si vous nealias tmp 'echo $1'
et essayertmp hi
vous permettra d'imprimer "salut" parce que c'est comme si vous n' "echo $1 hi".Pour le voir plus clairement, essayez
alias tmp 'echo abc $1 def '
et netmp hi
de nouveau, et vous aurez l'impression de "abc def salut". Encore une fois, si vous essayezalias tmp 'echo $1 & which '
et de l'utiliser de nouveau, sauf si vous avez une commande nomméehi
, voir quelque chose comme "hi": Commande introuvable". ou si vous netmp ls
vous verrez le résultat dewhich ls
.Un exemple de plus: essayez
alias tmp 'echo $1 & '
ettmp hi
de voir qu'en fait, il essaie d'exécuterhi
comme si c'était une commande, ce qui peut être dangereux si vous n'attendiez pas que.