문자 조합의 모든 문자와 Bash의 조합 값 자체를 일치시킵니다.

문자 조합의 모든 문자와 Bash의 조합 값 자체를 일치시킵니다.

Bash에서 정규식을 연습할 때 괄호 안에 전체 집합/검색 패턴을 일치시키려고 노력합니다.

대신에 그 안의 모든 문자를 일치시킵니다.

예를 들어,

cd
touch a.c a.h a.o a.cho
ls *.[cho]

일치 ls:

a.c
a.h
a.o 

그러나 의 전체 컬렉션과 일치하지 않습니다 a.cho.

전체 세트가 일치하지 않는 이유는 무엇이며 어떻게 해야 합니까?

답변1

여기서는 정규식을 사용하지 않고 파일 이름 글로빙 패턴을 사용합니다.

단일 문자 만 일치하므로 (파일 이름 와일드카드 패턴과 정규 표현식 간에 동일함) 세 문자( " 및 " 중 하나를 의미 ) [...]와 일치하지 않습니다 .cho[cho]cho

use 로 시작하는 모든 a.이름 과 일치합니다 a.*.

, 또는 로 끝나는 모든 이름을 일치시키려면 a.먼저 셸 옵션을 로 설정하고 사용하세요.chochoextglobshopt -s extgloba.@([cho]|cho)

이와 같은 중괄호 확장은 a.{c,h,o,cho}명령줄에 파일 이름을 생성하지만 파일이 실제로 존재한다는 보장은 없습니다.

답변2

배쉬를 사용할 수 있습니다지원 확장이것은아니요패턴이지만 문자열 목록

ls *.{c,h,o,cho}

쉘 확장앞으로ls 명령은 다음과 같이 실행됩니다.

ls *.c *.h *.o *.cho

중괄호 확장은 파일 이름 확장 전에 발생하므로 중괄호 안에 glob 패턴을 넣을 수 있습니다.

ls *.{[cho],cho}

관련 정보