$ 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
왜 이런 일이 발생하는지 이해하지 못합니다. 누군가 이것을 설명해 주시겠습니까?
답변1
중괄호는 와일드카드 패턴이 아닙니다. 조사하다Bash 확장에 대한 문서: 중괄호는 프로세스 초기에 확장되고, 와일드카드 패턴은 마지막 단계에서 확장됩니다.
처음에 명령은 두 단어로 구성 되었습니다 echo
. *{1..12}
중괄호가 확장된 후 명령에는 echo
, *1
, *2
, …, 13개의 단어가 포함됩니다 *12
. 그런 다음 와일드카드 패턴을 확장합니다. *1
로 끝나는 파일 이름 목록으로 확장됩니다 1
. 여기에는 다음을 포함할 뿐만 아니라 file1
포함도 포함됩니다 file11
(나중에 사전순으로 정렬됨). 또한 및 (순서대로) *2
로 확장됩니다 . 따라서 , , , , , 그리고 개별 파일과 일치하는 추가 와일드카드( , , ..., ) 를 얻게 됩니다 .file12
file2
echo
file1
file11
file12
file2
file3
file4
file12
마지막으로 , 매뉴얼의 내용을 따르지만 "인용문 제거"가 실제로는 문제가 되지 않는 경우 - 확장 프로세스 전에 인용문이 구문 분석됩니다.