Comment $ {! #} Fonctionne-t-il en bash pour obtenir le dernier argument de ligne de commande?

19

À partir du Guide de script Bash avancé, pour obtenir le dernier argument de ligne de commande:

Ou: lastarg=${!#} Il s'agit d'une référence indirecte à la $#variable.
Notez que lastarg=${!$#}cela ne fonctionne pas.

flerb
la source
4
En passant, l'ABS est assez mal vu comme référence; voir wooledge.org/~greybot/meta/abs pour l'histoire de son factoïde dans le canal irc.freenode.org # bash. Le Bash-Hackers 'Wiki et le Wooledge BashGuide ne sont pas aussi tristement célèbres pour la densité des inexactitudes. Dans ce dernier, les références indirectes sont traitées en détail dans BashFAQ # 6 ; dans l'ancien, wiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy
1
Juste une question: n'est-ce pas !$plus simple et pareil?
unxnut

Réponses:

27

Comme il est dit, c'est une référence indirecte. Prenons l'exemple suivant:

$ var=test
$ test='Hello, world'
$ echo ${!var}
Hello, world

Maintenant, si je devais définir les paramètres de position suivants:

$ set -- one two three

Et $#représentera le nombre total de paramètres positionnels:

$ echo $#
3

Cela signifie que lorsque je l'appelle comme ${!#}je dis, donnez-moi la valeur du paramètre nommé 3:

$ echo ${!#}
three
Jesse_b
la source