파일 전역 확장자가 억제되지 않는 이유

파일 전역 확장자가 억제되지 않는 이유

다음 스크립트가 있습니다 my.sh.

echo $@

이제 파일 전역 확장을 보고 싶기 때문에 이것이 마음에 들고 잘 작동합니다.

$ bash my.sh *
$ f1 f2 my.sh

이제 다음에 설명된 기술을 사용하여 확장을 억제하려고 합니다.이 답변:

$ bash my.sh "*"
$ bash my.sh \*

하지만 여전히 모든 파일 목록이 출력됩니다. 왜?

답변1

스크립트가 처음 호출될 때

$ bash my.sh *

파일 이름 글로빙은 스크립트를 호출하기 전에 셸에서 수행됩니다.

두 번째로 스크립트를 호출할 때

$ bash my.sh "*"

파일 이름 글로빙은 런타임 시 스크립트에서 수행됩니다 echo $@.

이를 방지하려면 $@줄 주위에 큰따옴표를 넣으세요.

echo "$@"

추가 자료:bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험

관련 정보