이는 다음으로 시작하는 난독화된 악성 쉘 스크립트에서 발견되었습니다.
${!#}${*^} <<<
...
쌍에 대한 참조를 찾을 수 없지만 ${!#}
' echo
d'가 인쇄되면 -bash
실행 중인 셸에 대한 비밀 참조입니까? 그렇다면 왜 추가 대시를 사용합니까?
감사해요!
답변1
이 답변은 에서 bash
시도했기 때문에 구체적 입니다 . 모든 쉘이 동일하게 작동하는 것은 아닙니다.echo
bash
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