조건 문자열이 reg.expression과 일치합니다.

조건 문자열이 reg.expression과 일치합니다.

따라서 내 스크립트에서는 매개변수 중 하나가 유효한 이메일 주소인지 확인해야 합니다. 시도했지만 실패했습니다.

if $maddr="^.$*\(@\)\(*\)\(.\)\(??*\)"

then
...

이는 최소 1개의 문자, 그 뒤에 @, 그 뒤에 아무 것도 없고 그 뒤에 점이 오고 그 뒤에 최소 2개의 문자가 옴을 의미합니다.

답변1

문자열을 정규식과 일치시키는 Unix 도구는 다음과 같습니다 expr.

if expr "$maddr" : '..*@.*\...' > /dev/null; then...

(정규식은 암시적으로 expr처음에 고정되어 있습니다.)

이 경우에는 간단한 쉘 패턴 일치로 충분합니다.

case $maddr in
  ?*@*.??*) ...
esac

일부 셸(예 zsh: ksh93및 ) 에는 표준 구문 위에 확장 기능 bash으로 정규식 일치 연산자가 내장되어 있지만 구문은 이러한 셸 간에 약간 다릅니다.sh

pattern='.@.*\...'
if [[ $maddr =~ $pattern ]]; then...

세 가지 모두에서 작동해야 합니다.

(이러한 패턴은 유효한 이메일 주소를 보장하지 않습니다.)

답변2

_vaddr() { { cat
    printf %s\\n "$@"
} | grep -o '[^ ]*@[^ ]*' |
    grep -q "$REGEX" && {
        $DO_SUCCESS
        } || $HANDLE_FAILURE
}

관련 정보