2016-10-30 3 views
3

나는 첫 번째 문자는 [a-zA-Z0-9]와 경우 [[$ 문자열이 아닌 경우 다음과 같은 기능배쉬 정규식 비교 문제

checkFormat() 
{ 
     local funcUserName=$1 
     if [[ "$funcUserName" != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]];then 
       echo "1" 
     else 
       echo "0" 
     fi 
} 

if [[ $string != [a-zA-Z0-9]* ]] 

만 true를 반환해야! = [A-zA- Z0-9] {5}]]

절대로 true를 반환합니다.

if [[ $string != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]] 

원하는대로 반환하십시오. 이유가 무엇인가요?

코드는 사용자 이름이 5 자이고 영숫자 (예 : Joe12 또는 12345) (% $ 134 제외)인지 확인하는 것입니다.

bash는 버전 4.2.37

+0

좋은 점은 샘플 입력 (좋음과 나쁨 포함)을 포함해야한다는 것입니다. 행운을 빕니다. – shellter

+0

실제로 regex를 확인하고 싶습니까? 몇 가지 예를 들면 –

+3

이것은 정규식이 아닙니다. 그것은 globs라고 불리는 다른 종류의 패턴입니다. 그들은 비슷하게 보일 수 있지만, 동일하지는 않습니다. –

답변

3

나는 정규식과 일치하는

if [[ ! $string =~ ^[a-zA-Z0-9]{5}*$ ]] 

에 의해

if [[ $string != [a-zA-Z0-9]{5} ]] 

를 교체하는 것이 좋습니다.

+0

안녕하세요, 고마워요. [[$ string = ~^[a-zA-Z0-9] {5} * $]]를 시도하고 논리를 뒤집 으면 작동하지 않았습니다. 왜 그렇게? – joemobaggins

+0

이것은 bash 버전 4와 함께 저에게 적합합니다 :'string = "a1B2c"; [+ $ string = ~^[a-zA-Z0-9] {5} * $]] && echo match' – Cyrus

+0

나에게 && 구문을 설명해 주시겠습니까? 나는 그것이 AND라는 것을 깨닫는다. 그러나 나는이 맥락에서 그것을 이해하지 못한다. – joemobaggins