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; done
obtener el último elemento$i
) pero estaba buscando algo más elegante.eval
por 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