Wie funktioniert $ {! #} In Bash, um das letzte Befehlszeilenargument abzurufen?

19

So rufen Sie im Advanced Bash-Scripting Guide das letzte Befehlszeilenargument ab:

Oder: lastarg=${!#} Dies ist eine indirekte Referenz auf die $#Variable.
Beachten Sie, dass lastarg=${!$#}das nicht funktioniert.

flerb
quelle
4
Abgesehen davon ist das ABS als Referenz ziemlich verpönt. siehe wooledge.org/~greybot/meta/abs für die Geschichte ihrer factoid im irc.freenode.org # bash - Kanal. Das Bash-Hackers 'Wiki und der Wooledge BashGuide sind nicht so berüchtigt für die Dichte von Ungenauigkeiten. In letzterem Fall werden indirekte Verweise ausführlich in BashFAQ # 6 behandelt . im ersteren wiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy
1
Nur eine Frage: Ist das nicht !$einfacher und gleich?
Unxnut

Antworten:

27

Wie es heißt, handelt es sich um eine indirekte Referenz. Nehmen Sie das folgende Beispiel:

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

Nun, wenn ich die folgenden Positionsparameter einstellen würde:

$ set -- one two three

Und $#stellt die Gesamtzahl der Positionsparameter dar:

$ echo $#
3

Das bedeutet, wenn ich es so nenne, wie ${!#}ich sage, gib mir den Wert des Parameters mit dem Namen 3:

$ echo ${!#}
three
Jesse_b
quelle