Bash 확장, 에코 및 파일

Bash 확장, 에코 및 파일

누군가 이것이 어떻게 작동하는지 설명할 수 있습니까? 내장된 echo 명령이 디렉토리 목록과 상호 작용하는 방식을 이해하지 못합니다.

bash-5.2$ ls
2   file000 file003 file006 file009 file012 file015 file018 file021 file024 file027 h
5   file001 file004 file007 file010 file013 file016 file019 file022 file025 file028 ola
8   file002 file005 file008 file011 file014 file017 file020 file023 file026 file029 q
bash-5.2$ echo [0-9a-z]
2 5 8 h q

감사해요.

답변1

이는 수신된 인수, 공백 분리 및 개행 종료(일부 잠재적인 옵션 처리 및 백슬래시 이스케이프 처리 후)를 인쇄하는 것과는 아무런 관련이 없습니다 echo.echo

여기서 보이는 것은 쉘의 효과입니다.와일드카드, 또한 ~으로 알려진파일 이름 생성또한 ~으로 알려진경로명 확장*, 따라서 목록 컨텍스트에서 , ?및 ( 제외 fish) , [...](셸에 따라 더 많은 경우도 가능)를 포함하여 인용되지 않은 와일드카드 패턴 연산자가 포함된 경우 일부 단어가 확장됩니다.쉘을 통해디렉토리 트리에서 일치하는 파일 목록으로 이동합니다.

명령에 관계없이 echo, rm, firefox...

다음에서 본 적이 있을 것입니다.

rm -- *.txt

거기에서 *행동이 유발됩니다.

존재하다:

echo [0-9a-z]

그것이 [...]그것을 촉발시킨 것입니다. 패턴으로 는 및 또는 1과 사이의 문자 하나와 일치하므로 [0-9a-z]와일드카드로 이 단어는 패턴과 일치하는 현재 작업 디렉터리의 모든 단일 문자 파일 이름으로 확장됩니다.09az[0-9a-z]

rm -- [0-9a-z]삭제, vi -- [0-9a-z]편집 등을 할 것입니다 .

중요한 팁:명령, rm, echo, vi... 중 하나는 패턴이 아닌 확장 결과(별도의 인수로)만 표시합니다. 특히 해당 확장자의 첫 번째² 파일 이름이 -3로 시작하는 경우 잠재적으로 재앙적인 영향을 미치는 옵션으로 간주될 수 있으므로 에서와 마찬가지로 ⁴을 cmd -- $files잊지 않는 것이 중요합니다 --.


2¹ 여기에는 , 5, , 8와 같은 문자가 포함되지만 h, , 와 같은 자주 q(종종 간과되는) 문자도 포함됩니다 ².DŽ

관련 정보