Al intentar obtener el último parámetro posicional establecido /bin/dash, lo intenté echo ${$#}. Sorprendentemente, esto no resultó en un error, sino en PID, que es lo mismo que el $$contenido variable. Pregunta, ¿por qué funcionó esa sintaxis? ¿Cuál es la regla de sintaxis que Shell aplicó aquí?
Básicamente, lo que hice es
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Aparentemente, el %personaje también se ignora en tal construcción
$ echo ${$%}
13819
Pero *y el @resultado es un error de sustitución incorrecto:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution

${$*}y${$@}produce?#y%y qué resultados de comportamiento de aquellos.eval, por ejemplodash -c 'set 1 2 3 4 5; eval "echo \$$#"'. Fuente: Ubuntu Wikifor i; do true; doneobtener el último elemento$i) pero estaba buscando algo más elegante.evalpor supuesto, puede tener problemas potenciales, en qué medida, ese es otro tema. Pero sí, es una opciónRespuestas:
Esto es
$$con un prefijo vacío eliminado :Lo mismo se aplica para
%(sufijo).@y*no son modificadores de expansión de parámetros, por lo que son errores. Ocurriría para$?,$-o también para un hipotético$=.${$+}Es una expansión vacía.fuente