echo [9876543210]는 1 4 5 6을 표시합니다...왜죠?

echo [9876543210]는 1 4 5 6을 표시합니다...왜죠?

마지막 네 개의 echo 문이 1 4 5 6을 표시하는 이유를 설명해 주세요. 이전에 이 문제를 우연히 발견한 적이 있지만 지금은 왜 이런 동작이 발생하는지 궁금합니다.

이 진술은 (나에게는) 예상대로 작동합니다.

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

이러한 에코 문은 항상 1 4 5 6을 표시합니다. 이 숫자에 특별한 것이 있나요?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6

감사해요!

  • 중복 가능성은 관련성이 있고 도움이 되지만 중복은 아닙니다. 가능한 중복은 명령 관점에서 발생합니다 rm. 이 질문은 인식된 명령의 "이상한 동작"이라는 관점에서 비롯됩니다 echo. 두 가지 모두에 대한 근본적인 대답은 와일드카드입니다. 명령 문제를 검색하는 echo사람은 rm문제를 쉽게 찾을 수 없지만 여기에 도달할 가능성이 더 높습니다.

답변1

여는 괄호 [는 셸 특수 문자입니다. 이는 "괄호 안의 모든 문자와 일치"를 의미하는 패턴 일치 알고리즘을 활성화합니다. 현재 디렉토리에 1, 4, 5, 6이라는 4개의 파일이 있으므로 대괄호 안의 문자에 이러한 숫자가 포함되면 쉘은 패턴 일치를 이러한 파일 이름으로 바꿉니다. 대신 사용하는 경우 , 및 echo [ 9876543210 ]3개의 인수를 사용하여 echo를 호출합니다 .[9876543210]

쉘이 이를 패턴 일치 요청으로 처리하지 않도록 하려면 echo 문의 매개변수를 인용해야 합니다.

$ echo '[9876543210]'
[9876543210]

(또는 이름이 1, 4, 5 및 6인 파일을 삭제하십시오. 그러나 이것은 수정 사항이 아니라 동작을 보여주기 위한 해결 방법입니다.)

관련 정보