• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

정규 표현식 비교 질문

20.09.28 01:14 작성 조회수 230

1

정규 표현식부터 난이도가 높아져서 이해가 잘 안되고 있습니다.

Bash는 여러 특수 문자의 조합들이 의미하는것이 어려운데요......

아래 2가지 질문에 다시 한번 설명해주시면 감사하겠습니다.

1. if [[ $LANG =~ $locale ]] : =~ 우측 표현식($locale)이 좌측 표현식($LANG)을 포함할때 사용이 가능한건가요?

부연 설명 드리자면, $LANG 입력시 "en_US.UTF-8" 결괏값이 나오는데, locale 명령어에 이 결괏값이 포함되어 있어야만 정규 표현식 비교가 가능한지 궁금합니다.

2. =~ 는 그냥 일반적인 산술 연산시 = 와 같은 일종의 문법인건가요?

답변 1

답변을 작성해보세요.

0

질문1. 정규식 비교는 다음처럼 정의됩니다

if [[ 대상문자열 =~ 패턴식 ]]; then ... else ... fi  

왼쪽에는 비교하고 싶은 문자열을 적고, 비교연산자(=~) 오른쪽에는 정규식 패턴식을 적습니다

말 그대로 패턴이 일치하기만 하면 성공(true) 이 될 것입니다. 

adfas1211 님께서 '우측 표현식($locale)이 좌측 표현식($LANG)을 포함할때 사용이 가능한건가요?' 라고 표현해주셨는데 그렇게 생각하셔도 됩니다. 그 근거는 다음 예시입니다

(예문)

bash-3.2$ if [[ HELLO =~ H ]]; then echo YES; else echo NO; fi

YES

bash-3.2$ if [[ HELLO =~ HELLO1 ]]; then echo YES; else echo NO; fi

NO

bash-3.2$

추가. [[ ]] 이중 대괄호는 BASH에서는 지원하지만 본쉘(sh)에서는 사용할 수 없습니다. 주의하세요~~

 

질문2. 그렇습니다 :)

영상 섹션 2. 특수문자 종류 미리 보기에서 보신 것처럼 해커들은 자신들이 표현(구현)하고 싶은 기능을 모두 특수문자에 담고 싶어 했을 것입니다. 하지만, 키보드 특수문자의 갯수는 한정되어 있죠. 따라서, 중복 정의가 불가피합니다

바로 이 부분이 쉘 스크립트를 난해하게 만들었다는 점은 인정해야 합니다

보충 설명이 필요하면 댓글 달아주세요