Come funziona $ {! #} In bash per ottenere l'ultimo argomento della riga di comando?


19

Da Advanced Bash-Scripting Guide, per ottenere l'ultimo argomento della riga di comando:

Oppure: lastarg=${!#} questo è un riferimento indiretto alla $#variabile.
Nota che lastarg=${!$#}non funziona.


4
A parte questo, l'ABS è piuttosto disapprovato come riferimento; vedi wooledge.org/~greybot/meta/abs per la storia del suo factoide nel canale irc.freenode.org # bash. Il Wiki di Bash-Hackers e il Wooledge BashGuide non sono così famosi per la densità di imprecisioni. All'interno di quest'ultimo, i riferimenti indiretti sono trattati in dettaglio in BashFAQ # 6 ; nel primo, wiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy,

1
Solo una domanda: non è più !$semplice e uguale?
Unxnut,

Risposte:


27

Come dice che è un riferimento indiretto. Prendi il seguente esempio:

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

Ora, se dovessi impostare i seguenti parametri posizionali:

$ set -- one two three

E $#rappresenterà il numero totale di parametri posizionali:

$ echo $#
3

Ciò significa che quando lo chiamo come ${!#}sto dicendo, dammi il valore del parametro denominato 3:

$ echo ${!#}
three
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.