$ 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
왜 이런 일이 일어나고 있는지 이해할 수 없습니다. 누군가 설명해 주시겠습니까?
답변
중괄호는 와일드 카드 패턴이 아닙니다. bash 확장 문서를 확인하십시오 : 괄호는 프로세스 초기에 확장되고 와일드 카드 패턴은 마지막 단계 ¹에서 확장됩니다.
처음에는 명령은 두 단어로 구성되어 echo
, *{1..12}
. 중괄호 확장 한 후, 명령이 13 개 단어를 포함 echo
, *1
, *2
, …, *12
. 그런 다음 와일드 카드 패턴이 확장됩니다. *1
로 끝나는 파일 이름 목록으로 확장 1
뿐만 아니라 포함 file1
뿐만 아니라 file11
(사전 식 순서 이후에 분류된다). 마찬가지로 *2
로 확장 file12
하고 file2
(이 순서로). 당신이 얻을 그래서 echo
, file1
, file11
, file12
, file2
하나의 파일과 일치하고 다른 와일드 카드 것을 : file3
, file4
, …, file12
.
¹ 마지막으로 매뉴얼의 설명을 따르지만 “인용 제거”는 실제로 중요하지 않습니다. 따옴표는 확장 프로세스보다 먼저 구문 분석됩니다.