在尝试获取最后一个位置参数集时/bin/dash
,我试过了echo ${$#}
。令人惊讶的是,这并没有导致错误,而是进入与$$
变量内容相同的 PID。问题,为什么该语法有效?shell 在这里应用的语法规则是什么?
基本上,我所做的是
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
显然,%
在这种结构中,字符也会被忽略
$ echo ${$%}
13819
但是*
并@
导致错误的替换错误:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
这是
$$
删除了一个空前缀:这同样适用于
%
(后缀)。@
并且*
不是参数扩展修饰符,因此它们是错误的。它也会发生在$?
,$-
或假设$=
的情况下。${$+}
是一个空扩展。