Durante il tentativo di ottenere l'ultimo parametro posizionale impostato /bin/dash
, ho provato echo ${$#}
. Sorprendentemente questo non ha provocato un errore, ma in PID che è lo stesso dei $$
contenuti variabili. Domanda, perché la sintassi ha funzionato? Qual è la regola di sintassi applicata dalla shell qui?
Fondamentalmente, quello che ho fatto è
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparentemente, %
anche il personaggio viene ignorato in tale costrutto
$ echo ${$%}
13819
Ma *
e @
causare l'errore di sostituzione Bad:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
e %
e quali risultati di comportamento da quelli.
eval
ad es dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Fonte: Ubuntu Wiki
for i; do true; done
di inserire l'ultimo oggetto $i
) ma stavo cercando qualcosa di più elegante. eval
ovviamente possono avere potenziali problemi, pensato fino a che punto - questo è un altro argomento. Ma sì, è un'opzione
${$*}
e${$@}
produci?