echo [9876543210] 표시 1 4 5 6… 왜?


19

마지막 4 개의 에코 문에 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질문을 찾을 수 없지만 여기에 더 많이 도달 할 수 있습니다.

16
현재 디렉토리에 4 개의 파일이 있으며 이름은 다음 1 4 5과 같습니다.6
Jeff Schaller

5
metasmoke.erwaysoftware.com/post/58973의 봇인 Lol 은 "제목에 전화 번호가 있기 때문에"이 게시물을 스팸으로 표시합니다.
Carlo Wood

2
@CarloWood, 연속 10 자리 숫자는 지역 번호가있는 미국 전화 번호와 일치합니다. 일반 형식을 사용하여 작성하면 987-654-3210이됩니다.
Mark

1
을 켜면 nullglob두 번째 예제 ( echo [237890])가 실제로 아무 것도 인쇄하지 않으므로 다른 예제에서 glob-expansion을보고 있다는 단서가 될 수 있습니다.
Kyle Strand

답변:


33

열린 브래킷 [은 쉘의 특수 문자입니다. "괄호 안의 모든 문자와 일치"라는 패턴 일치 알고리즘을 엽니 다. 현재 디렉토리에 이름이 1, 4, 5 및 6 인 4 개의 파일이 있으므로 대괄호 안의 문자에 해당 숫자가 들어 있으면 쉘은 패턴 일치를 해당 파일 이름으로 바꿉니다. 대신 사용하는 경우 echo [ 9876543210 ]: 당신은 3 개 개의 매개 변수와 함께 에코를 요구하고 [, 9876543210하고 ].

쉘이 패턴 일치 요청으로 인식하지 못하게하려면 echo 문의 매개 변수를 인용해야합니다.

$ echo '[9876543210]'
[9876543210]

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


4
아마도 세 가지 매개 변수를 사용 하는 echo [ 987 ]호출 echo은 언급조차 하는 것보다 낫습니다 test.
dhag

2
실제로 것입니다! 나는 과도하게 대답했다 :(
Jeff Schaller

1
* 나는 처음에 다양한 테스트의 에코 문을 시도 하면서이 문제를 극복 했으므로 첫 번째 답변 버전을 좋아합니다.
MikeD

1
원래의 대답은 사실이 아닙니다. 그는 다음과 같이 썼다 : echo [9876543210]. [(따라서 테스트)의 호출은 수행되지 않습니다.
knezi

요점은 대괄호 사이에 공백이 있는지 여부와 그 안에 무엇이 있는지 echobash따라 인수 가 다르게 해석 된다는 것입니다. [123][ 123 ].
jskroch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.