bash에서 [[:space:]]는 무엇을 의미합니까?

bash에서 [[:space:]]는 무엇을 의미합니까?

방금 bash 스크립트를 발견했습니다. [[:space:]]Bash 스크립트에서 이는 무엇을 의미합니까? 왜 이중 콜론인가?

답변1

실제로는 bash 매뉴얼에 있지만 찾고 있는 것이 무엇인지 아는 것이 도움이 됩니다.아니요이는 자신이 보고 있는 내용을 모를 때 유용합니다. 검색해보시면 조건식 부분이 있어서 헷갈리실 [[텐데요 . [[ expression ]]또한 검색하면 :space:동일한 섹션 아래에 두 개의 예가 표시됩니다. 이 예에서는 탐색경로 탐색을 따라갈 수 있습니다.

예를 들어, 다음은 한 줄(셸 변수 줄에 저장됨)과 일치하고 값에 공백 문자(0 포함), 0개 또는 한 개의 인스턴스로 구성된 문자 시퀀스가 ​​있는 경우 'b'와 일치합니다. ㅏ':

[[ $line =~ [[:space:]]*?(a)b ]]

...그 부분이 "공백 문자"에 해당한다는 점에서 함께 엮을 수 있지만 [[:space:]], 그렇게 생각할 수도 있습니다.오직나타내는 전체 문자 클래스가 아닌 리터럴 공백 문자입니다.

" space"만약 당신이 ( 혹시 ?)온라인 배쉬 매뉴얼, 플레이할 수 있는 게임은 "단" 약 32개입니다. 대략 10번째는 여기에 있을 것입니다:

"[" 및 "]"에서 문자 클래스는 [:class:] 구문을 사용하여 지정할 수 있습니다. 여기서 class는 POSIX 표준에 정의된 다음 클래스 중 하나입니다.

alnum   alpha   ascii   blank   cntrl   digit   graph   lower
print   punct   space   upper   word    xdigit

문자 클래스는 해당 클래스에 속하는 모든 문자와 일치합니다.

그러면 다음 위치로 이동합니다.POSIX 표준거기에서 "문자 클래스"라는 용어를 검색하여 찾을 수 있습니다.

wctype, wctype_l - 문자 클래스 정의, 이를 통해 다음을 수행할 수 있습니다.

wctype() [CX] [옵션 시작] 및 wctype_l() [옵션 종료] 함수는 현재 로케일 [CX] [옵션 시작]의 문자 유형 정보에 의해 정의된 인코딩 문자 세트 규칙에 따라 wctype_t의 값을 결정해야 합니다. 또는 각각 로케일에서 [Option End]는 로케일(LC_CTYPE 범주)을 나타냅니다.

그러다가 따라하면로케일 설정링크를 클릭하면 결국 실제 답변을 얻을 수 있습니다.로케일 섹션:

공간

공백 문자로 분류할 문자를 정의합니다. POSIX 로케일에서는 <space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>이것이 정확하게 포함되어야 합니다.

upper, lower, alpha, digit, graph 또는 xdigit 키워드에 지정된 문자는 로케일 정의 파일에 지정하면 안 됩니다. Portable Character Set <space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>및 클래스 공백에 포함된 모든 문자는 자동으로 이 클래스에 포함됩니다.

답변2

이는 Bash만을 위한 것이 아니라 POSIX 표기법의 일부입니다.

POSIX란 무엇입니까?

POSIX 또는 "UniX용 휴대용 운영 체제 인터페이스"는 (UNIX) 운영 체제가 지원해야 하는 여러 기능을 정의하는 표준 모음입니다. 이러한 표준 중 하나는 정규식의 두 가지 유형을 정의합니다.

POSIX 대괄호 표현식

POSIX 대괄호 표현식은 특수 문자 클래스입니다. POSIX 대괄호 표현식은 일반 문자 클래스와 마찬가지로 문자 집합 내의 문자와 일치합니다.

표준 POSIX

[[:alnum:]]   Alphanumeric characters
[[:alpha:]]   Alphabetic characters
[[:blank:]]   Space and tab
[[:cntrl:]]   Control characters
[[:digit:]]   Digits
[[:graph:]]   Visible characters (anything except spaces and control characters)
[[:lower:]]   Lowercase letters
[[:print:]]   Visible characters and spaces (anything except control characters)
[[:punct:]]   Punctuation (and symbols).
[[:space:]]   All whitespace characters, including line breaks
[[:upper:]]   Uppercase letters
[[:xdigit:]]  Hexadecimal digits

표준 없음

[[:ascii:]]   ASCII characters
[[:word:]]    Word characters (letters, numbers and underscores)

레거시 구문(누구든지 이에 대한 참조를 찾을 수 있습니까?)

[[:<:]]       Start of Word 
[[:>:]]       End of Word

자세한 내용은 여기에서 확인할 수 있습니다.위키피디아

답변3

정규식 및 파일 이름 glob/shell 패턴에서 이 [...]구문은 대괄호 안에 나열된 문자 중 하나와 일치합니다. 이 괄호 안에는 일부 명명된 표준 문자가 있습니다.캐릭터 클래스사용할 수 있습니다. 하나의 경우 [:space:]공백 문자와 일치합니다( \sPerl 정규 표현식과 마찬가지로). 예를 들어 참조하십시오.Bash 매뉴얼의 패턴 일치

따라서 [[:space:]]공백만 일치하는 정규식 또는 패턴 일치의 일부입니다.

예를 들어 패턴 일치(Bash 전용이 아닌 표준 쉘):

case $var in 
    *[[:space:]]*) echo "'$var' contains whitespace";;
esac

또는 정규식(Bash):

if [[ $var =~ [[:space:]] ]]; then
    echo "'$var' contains whitespace"
fi

대괄호 표현식은 [...]정규 표현식과 셸 패턴에서 동일한 방식으로 작동하지만 매우 유사한 경우가 많습니다.아니요같은. ( case그리고 [[ string == pattern ]]패턴 일치를 사용하고 [[ string =~ regex ]]정규식을 사용합니다.)

정규 표현식은 쉘에만 국한되지 않으며, 예에서 사용되며 awksed에서 설명됩니다.리눅스 매뉴얼 페이지regex(7)

관련 정보