정규식을 사용하여 bash에서 0-5 사이의 입력을 확인하는 방법

정규식을 사용하여 bash에서 0-5 사이의 입력을 확인하는 방법

범위 내의 단일 숫자를 확인하는 정규식 패턴은 무엇입니까? 테스트할 때 작동하는 것으로 보이는 다음 패턴을 시도하고 있습니다 https://regex101.com/.

패턴:\b([0-5])\b

예상되는 결과:

입력: 2 출력: OK

입력: 5 출력: OK

입력: 6 출력: 없음

입력: 22 출력: 없음

test$ ch=2
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=6
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=62
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=0
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$

나는 또한 이중 반환을 시도했습니다.

test$ ch=2
test$ [[ $ch =~ \\b[0-5]\\b ]] && echo "ok" || echo "no"
no
test$ [[ $ch =~ \\b([0-5])\\b ]] && echo "ok" || echo "no"
no

제 경우에는 bash는 항상 "아니오"를 제공합니다. 왜 이런가요?

답변1

$chASCII 숫자 0, 1, 2, 또는 중 하나 인지 확인하려면 다음 3을 사용하십시오.45

  • 이식성( sh구문):

    case $ch in 
      ([012345]) echo OK;;
      (*) echo not OK;;
    esac
    
  • Cohen 스타일 대안:

    if [[ $ch = [012345] ]]; then
      echo OK
    then
      echo not OK
    fi
    

하다아니요use ranges such as [0-5]for input validation as (depending on system and locale) that tends to include many other characters that happen to sort between 0 and 5 beside 012345 such as ٠١٢٣٤۰۱۲۳۴߀߁߂߃߄०१२३४০১২৩৪੦੧੨੩੪૦૧૨૩૪୦୧୨୩୪௦௧௨௩௪౦౧౨౩౪౸౹౺౻౼౽౾೦೧೨೩೪൦൧൨൩൪෦෧෨෩෪๐๑๒๓๔໐໑໒໓໔༠༡༢༣༤༪༫༬༭༳၀၁၂၃၄႐႑႒႓႔፩፪፫፬០១២៣៤៰៱៲៳៴᠐᠑᠒᠓᠔᥆᥇᥈᥉᥊᧐᧑᧒᧓᧔᧚᪀᪁᪂᪃᪄᪐᪑᪒᪓᪔᭐᭑᭒᭓᭔᮰᮱᮲᮳᮴᱀᱁᱂᱃᱄᱐᱑᱒᱓᱔⁰⁴₀₁₂₃₄⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅛⅜⅟↉①②③④⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓾⓿❶❷❸❹❿➀➁➂➃➉➊➋➌➍➓〇〡〢〣〤㉈㉉㉊㉋㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㋀㋁ ㋂㋃㋉㋊㋋㍘㍙㍚㍛㍜㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㏠㏡㏢㏣㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳ ㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽ 01234

답변2

귀하의 표현식은 bash 확장의 대상이므로 \b정규식을 확인하기 전에 확장(시도)됩니다. 그리고 캡처 그룹을 사용할 필요가 없는 것 같습니다.bch=b4b

먼저 다음과 같이 표현식을 변수에 넣을 수 있습니다.

exp='\b[0-5]\b'
[[ $ch =~ $exp ]] 

그러나 이와 같은 경우에는 산술 연산자를 사용하는 것을 선호합니다.

[[ $ch -gt 0 && $ch -lt 6 ]]

또는

((ch>0&&ch<6))

관련 정보