2013-03-17 3 views
0

를 사용하는 경우 내가 ".A"문자열의 선행 점과 일치 할 말 경기 선행 점 정규식

그래서 내가 입력

[[ ".A"= ~^\. ] & &가

헥타르 "HA"에코

[ "A"= ~^\. ]] & &는 "하"에코

헥타르

왜 내가 여기에 같은 결과는 무엇입니까?

+1

두 명령을 테스트 한 후 두 번째 명령은 'ha'를 출력하지 않습니다. – jfg956

+0

jfgagne에 동의합니다. 그건 bash의 최신 버전에서 작동합니다 –

답변

0

아마 bash가 "."을 처리하려고 시도했기 때문일 수 있습니다. \ n \ r과 같은 \ 문자로 입력하십시오.

\ &을 말합니다. 2 개 개의 분리 문자로, 3.0=~Bash 사이 버전의 일부 호환성 문제가있다

[[ "a" =~ ^\\. ]] && echo ha 
+0

그것은 작동한다! 감사! – MagicSea

1

마침표를 넘어 의미가있는 점을 이스케이프 처리해야합니다. 정규 표현식의 메타 문자입니다.

[[ "a" =~ ^\. ]] && echo "ha" 

다른 예도 변경하십시오.

bash 버전을 확인하십시오. 4.0 이상이 필요합니다.

+0

좋아요 ... 사실 제가 그랬습니다. 미안, 나는 눈치 채지 못했다. 내가 여기에 백 슬래시 '\'를 입력했을 때 어떤 이유로 든 떨어졌다. ... – MagicSea

+0

이에 따라 내 질문이 업데이트되었다 ... – MagicSea

1

보십시오. 배쉬에서 =~를 사용하는 가장 안전한 방법은 VAR에서 RE 패턴을 넣어하는 것입니다

자세한 내용
$ pat='^\.foo' 
$ [[ .foo =~ $pat ]] && echo yes || echo no 
yes 
$ [[ foo =~ $pat ]] && echo yes || echo no 
no 
$ 

E14 on the Bash FAQ page를 참조하십시오.