${$#}가 셸에서 $$와 동일한 결과를 반환하는 이유는 무엇입니까?

${$#}가 셸에서 $$와 동일한 결과를 반환하는 이유는 무엇입니까?

에서 마지막 위치 매개변수 세트를 가져오는 동안 /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]}

최소 접두사 패턴 제거. 이것단어패턴을 생성하려면 확장되어야 합니다. 매개변수 확장으로 인해범위, 패턴과 일치하는 접두사 중 가장 작은 부분을 제거합니다. 만약 존재한다면,단어따옴표가 없는 문자로 시작할 수 없습니다 #.

%(접미사) 에도 동일하게 적용됩니다 . 매개변수 확장 수정자가 @아니므 *로 오류입니다. 이것은 $?또한 가정적 으로 $-발생합니다 $=. ${$+}빈 확장입니다.

관련 정보