Jak $ {! #} Działa w trybie bash, aby uzyskać ostatni argument wiersza poleceń?


19

Z Advanced Bash-Scripting Guide, aby uzyskać ostatni argument wiersza poleceń:

Lub: lastarg=${!#} Jest to pośrednie odniesienie do $#zmiennej.
Pamiętaj, że lastarg=${!$#}to nie działa.


4
Nawiasem mówiąc, ABS jest dość marszczony jako odniesienie; zobacz wooledge.org/~greybot/meta/abs, aby zobaczyć historię jej faktoidu na kanale irc.freenode.org # bash. Przez encyklopedia bashowych-hakerów i Wooledge BashGuide nie są niesławny gęstości niedokładności. W ramach tego ostatniego odniesienia pośrednie są szczegółowo omówione w BashFAQ # 6 ; w pierwszym, wiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy

1
Tylko pytanie: czy nie jest !$prostsze i to samo?
unxnut

Odpowiedzi:


27

Jak mówi, jest to odniesienie pośrednie. Weź następujący przykład:

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

Teraz gdybym ustawił następujące parametry pozycyjne:

$ set -- one two three

I $#będzie reprezentować całkowitą liczbę parametrów pozycyjnych:

$ echo $#
3

To znaczy, kiedy nazywam to tak, jak ${!#}mówię, podaj mi wartość parametru o nazwie 3:

$ echo ${!#}
three
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.