동작이 LSB, POSIX 또는 기타 사양에 .*
포함되고 .
정의되어 있습니까?..
답변1
에서 인용단일 Unix 사양 버전 2, 볼륨 "명령 및 유틸리티", §2.13.3:
파일 이름이 마침표(
.
)로 시작하는 경우 마침표를 패턴의 첫 번째 문자로 사용하거나 슬래시 문자 바로 다음에 사용하여 마침표를 명시적으로 일치시켜야 합니다. (…) 대괄호 표현식 일치 목록의 명시적인 마침표는 지정되지 않습니다(예:[.abc]
파일 이름의 선행 마침표가 일치할 수 있는지 여부).
예외 없이 의 두 번째 마침표 ..
또는 의 유일한 마침표 뒤의 빈 문자열은 .
의 와일드카드 문자와 일치하지 않습니다 .*
. 그래서 표준은 말한다.*
일치 .
하고..
, 비록 이것이 짜증스러울 수는 있지만.
위 단락에서는 sh
쉘(명령)의 동작을 설명합니다. C 라이브러리 함수 섹션에서는 glob
이 구절을 인용합니다.
언어가 완전 똑같네요버전 3, POSIX:2001 및 IEEE 1003.1-2001이라고도 하며 이는 대부분의 최신 시스템이 구현하는 것입니다.
Dash, bash 및 ksh93은 POSIX와 호환됩니다. Pdksh와 zsh(아래에도 emulate sh
)는 그렇지 않습니다.
ksh에서는 설정을 통해 .*
건너 .
뛰고 설정할 수 있지만 이는 도트 파일을 포함하는 부작용이 있습니다. 또는 설정할 수 있지만 아무것도 일치하지 않습니다...
FIGNORE='.?(.)'
*
FIGNORE='.*'
.*
Bash에서는 설정을 통해 .*
건너뛰고 .
설정할 수 있지만 이는 도트 파일을 포함하는 부작용이 있습니다. 또는 설정할 수 있지만 아무것도 일치하지 않습니다...
GLOBIGNORE='.:..'
*
GLOBIGNORE='.*'
.*
답변2
아마도 당신은 bash 확장의 globigore 기능을 언급하고 있을 것입니다. 기본적으로 bash 확장은 .and..와 일치하지만 다음 내용을 읽어보세요.
The GLOBIGNORE shell variable may be used to restrict the set of file names matching
a pattern. If GLOBIGNORE is set, each matching file name that also matches one of
the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.''
and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting
GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option,
so all other file names beginning with a ``.'' will match. To get the old behavior
of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in
GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
GLOBIGNORE=.:..
다음과 같은 메시지가 표시될 때 이 변수를 설정할 수 있습니다 .
rm -r * .*
현재 디렉터리만 삭제합니다. POSIX 표준은 .가 현재 디렉터리이고 ..가 현재 디렉터리의 상위 디렉터리에 있다고만 지정합니다. .*의 특별한 의미는 bash나 다른 쉘(또는 grep과 같은 프로그램)에 의해 해석됩니다.
답변3
이것리눅스 매뉴얼 페이지POSIX.2, 3.13을 참조하세요.
답변4
제가 아는 한, LSB 4.1은 필수가 아니고 bash
필수입니다 sh
.
~을 위한sh
POSIX를 따릅니다.(관련되지 않은 사소한 확장 포함).