에서 마지막 위치 매개변수 세트를 가져오는 동안 /bin/dash
이 작업을 시도했습니다 echo ${$#}
. 놀랍게도 이로 인해 오류가 발생하는 것이 아니라 $$
변수 내용과 동일한 PID가 발생합니다. 문제는 이 구문이 왜 작동하는가입니다. 여기서 쉘은 어떤 구문 규칙을 적용합니까?
기본적으로 내가 한 일은 다음과 같다.
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
분명히 %
이 구성에서는 역할도 무시됩니다.
$ echo ${$%}
13819
그러나 심각한 대체 오류가 발생합니다 *
.@
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
답변1
이것은$$
빈 접두사를 제거했습니다.:
${parameter#[word]}
최소 접두사 패턴 제거. 이것단어패턴을 생성하려면 확장되어야 합니다. 매개변수 확장으로 인해범위, 패턴과 일치하는 접두사 중 가장 작은 부분을 제거합니다. 만약 존재한다면,단어따옴표가 없는 문자로 시작할 수 없습니다
#
.
%
(접미사) 에도 동일하게 적용됩니다 . 매개변수 확장 수정자가 @
아니므 *
로 오류입니다. 이것은 $?
또한 가정적 으로 $-
발생합니다 $=
. ${$+}
빈 확장입니다.