19.2. Globbing

Bash 자체는 정규 표현식을 이해하지 못 합니다. 스크립트에서는 sedawk 같은 명령어나 유틸리티가 정규 표현식을 해석해 줍니다.

Bash는 "globbing"이라고 하는 파일명 확장을 수행해 주는데 이는 표준 정규 표현식을 쓰지 않고, 대신에 와일드 카드를 인식하고 확장해 줍니다. globbing은 표준 와일드 카드 문자인 *, ?, 대괄호속의 문자 목록, 다른 특수 문자들(일치하지 않도록 부정해 주는 ^ 같은 문자)을 해석해 줍니다. 하지만 globbing시, 와일드 카드 문자 사용에는 중요한 몇가지 제한 사항이 있습니다. 예를 들어, *.bashrc처럼 점으로 시작하는 파일과 일치하지 않습니다. [1] 비슷하게, ?도 파일명 확장에서 쓰이면 정규 표현식의 일부분으로 쓰일 때와는 다른 의미를 갖습니다.

bash$ ls -l
total 2
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 a.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 b.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 c.1
-rw-rw-r--    1 bozo  bozo       466 Aug  6 17:48 t2.sh
-rw-rw-r--    1 bozo  bozo       758 Jul 30 09:02 test1.txt

bash$ ls -l t?.sh
-rw-rw-r--    1 bozo  bozo       466 Aug  6 17:48 t2.sh

bash$ ls -l [ab]*
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 a.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 b.1

bash$ ls -l [a-c]*
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 a.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 b.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 c.1

bash$ ls -l [^ab]*
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 c.1
-rw-rw-r--    1 bozo  bozo       466 Aug  6 17:48 t2.sh
-rw-rw-r--    1 bozo  bozo       758 Jul 30 09:02 test1.txt

bash$ ls -l {b*,c*,*est*}
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 b.1
-rw-rw-r--    1 bozo  bozo         0 Aug  6 18:42 c.1
-rw-rw-r--    1 bozo  bozo       758 Jul 30 09:02 test1.txt


bash$ echo *
a.1 b.1 c.1 t2.sh test1.txt

bash$ echo t*
t2.sh test1.txt
	      

echo 명령어도 파일이름에 대해서 와일드 카드 확장을 해 줍니다.

예 10-4를 참고하세요.

주석

[1]

파일명 확장은 직접적으로 점(dot)을 표시해줘야 도트파일(dotfile)과 일치합니다.
~/[.]bashrc    # ~/.bashrc 로 확장되지 않습니다.
~/?bashrc      # 이것도 안 됩니다.
               # globbing에서는 와일드 카드와 메타문자가 점으로 확장되지 않습니다.

~/.[b]ashrc    # ~./bashrc 로 확장됩니다.
~/.ba?hrc      # 역시 됩니다.
~/.bashr*      # 되겠죠?

# "dotglob" 옵션을 설정하면 이 기능을 꺼 줍니다.

# Thanks, S.C.