에코가 일부 파일을 두 번 일치시키는 이유는 무엇입니까?


11
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

왜 이런 일이 일어나고 있는지 이해할 수 없습니다. 누군가 설명해 주시겠습니까?

답변:


21

중괄호는 와일드 카드 패턴이 아닙니다. bash 확장 문서를 확인하십시오 : 괄호는 프로세스 초기에 확장되고 와일드 카드 패턴은 마지막 단계 ¹에서 확장됩니다.

처음에는 명령은 두 단어로 구성되어 echo, *{1..12}. 중괄호 확장 한 후, 명령이 13 개 단어를 포함 echo, *1, *2, ..., *12. 그런 다음 와일드 카드 패턴이 확장됩니다. *1로 끝나는 파일 이름 목록으로 확장 1뿐만 아니라 포함 file1뿐만 아니라 file11(사전 식 순서 이후에 분류된다). 마찬가지로 *2로 확장 file12하고 file2(이 순서로). 당신이 얻을 그래서 echo, file1, file11, file12, file2하나의 파일과 일치하고 다른 와일드 카드 것을 : file3, file4, ..., file12.

¹ 마지막으로 매뉴얼의 설명을 따르지만 "인용 제거"는 실제로 중요하지 않습니다. 따옴표는 확장 프로세스보다 먼저 구문 분석됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.