${!#}는 쉘 스크립트에서 무엇을 의미합니까? [복사]

${!#}는 쉘 스크립트에서 무엇을 의미합니까? [복사]

이는 다음으로 시작하는 난독화된 악성 쉘 스크립트에서 발견되었습니다.

${!#}${*^} <<<...

쌍에 대한 참조를 찾을 수 없지만 ${!#}' echod'가 인쇄되면 -bash실행 중인 셸에 대한 비밀 참조입니까? 그렇다면 왜 추가 대시를 사용합니까?

감사해요!

답변1

이 답변은 에서 bash시도했기 때문에 구체적 입니다 . 모든 쉘이 동일하게 작동하는 것은 아닙니다.echobash

bash, $var1그렇다면 와 foo동일 ${!var1}합니다 $foo. 이것은!간접 확장bash: 주어진 변수 a에서 검색 하게 됩니다 .변수 이름( foo) 바꾸다.

이제 매개변수 개수를 var1로 바꾸세요 #.  0 $#이면  그렇습니다 . 4 라면  그렇습니다 . 즉, 위치 인수가 아무리 많아도 마지막 위치 인수입니다. $#${!#}$0$#${!#}$4${!#}

위치 인수가 없으면 결과는 입니다 $#. 이는 쉘 또는 스크립트의 이름입니다(0$0인용하다). 당신이 생각하는 한 그건 bash(더하기선두-이는 로그인 쉘임을 의미합니다.)

빠른 테스트:

$ echo ${!#}
-bash

$ set the quick brown fox

$ echo ${!#}
fox

관련 정보