Bagaimana cara $ {! #} Bekerja di bash untuk mendapatkan argumen baris perintah terakhir?

19

Dari Panduan Script Bash Lanjutan, untuk mendapatkan argumen baris perintah terakhir:

Atau: lastarg=${!#} Ini adalah referensi tidak langsung ke $#variabel.
Perhatikan itu lastarg=${!$#}tidak berhasil.

Flerb
sumber
4
Selain itu, ABS sangat disukai sebagai referensi; lihat wooledge.org/~greybot/meta/abs untuk sejarah faktoidnya di saluran irc.freenode.org # bash. The Bash-Hacker Wiki dan Wooledge BashGuide yang tidak terkenal karena kepadatan ketidakakuratan. Dalam yang terakhir, referensi tidak langsung tercakup secara rinci dalam BashFAQ # 6 ; di bekas, wiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy
1
Hanya sebuah pertanyaan: Bukankah !$lebih sederhana dan sama?
unxnut

Jawaban:

27

Seperti dikatakan itu adalah referensi tidak langsung. Ambil contoh berikut:

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

Sekarang jika saya mengatur parameter posisi berikut:

$ set -- one two three

Dan $#akan mewakili jumlah total parameter posisi:

$ echo $#
3

Ini berarti ketika saya menyebutnya seperti ${!#}saya katakan beri saya nilai parameter bernama 3:

$ echo ${!#}
three
Jesse_b
sumber