![두 가지 변수 패턴을 한 번에 확인](https://linux55.com/image/121379/%EB%91%90%20%EA%B0%80%EC%A7%80%20%EB%B3%80%EC%88%98%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%ED%95%9C%20%EB%B2%88%EC%97%90%20%ED%99%95%EC%9D%B8.png)
두 변수가 하나씩 일치하는 대신 동시에 정규식 패턴과 일치하는지 확인할 수 있습니까? 이제 다음과 같이 작동합니다.
# A=1.1
# B=1.2
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
A:1.1 B1.2
# B=1.2.3
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
A:1.1 B1.2.3
# B=1.2.3.4
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
#
작동하지 않는 이 테스트처럼 두 가지를 동시에 테스트하고 싶습니다.
# [[ ($A|$B) =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
-bash: unexpected token `|', conditional binary operator expected
-bash: expected `)'
-bash: syntax error near `|$'
#
답변1
불행하게도 당신은 그렇게 할 수 없습니다. =~
연산자 in의 왼쪽은 bash
문자열입니다(그리고 올바르게 인용되어야 합니다). 원한다면 분명히 두 문자열(두 문자열의 연결 등)을 일치시키는 정규식을 만들 수 있지만 그렇게 하면 코드를 읽고 유지하기가 더 어려워지고 결과를 얻지 못할 수도 있습니다.속도그것으로부터(그것이 당신이 추구하는 것이라면).
&&
또한 두 가지를 테스트하기 위해 중간을 사용할 때 첫 번째 테스트의 오른쪽에 무엇이 포함되고 두 번째 테스트의 왼쪽에 무엇이 포함되는지 명확하고 명확하게 하기 위해 [[ ... ]] && [[ ... ]]
대신 사용하는 것을 고려해보세요.[[ ... && ... ]]
답변2
성공적인 일치에 특정 문자가 나타날 수 없다는 것을 알고 있는 경우 $A
적절한 반복 정규식에 대해 합계의 연결을 확인할 수 있습니다.$B
regex='([0-9]+(\.([0-9]+(\.([0-9]+))?))?)'
[[ "$A-$B" =~ ^$regex-$regex$ ]] && echo "A: $A B: $B"
^
더 이상 및 자체 가 포함되지 않는다는 사실을 보완하기 위해 정규식을 약간 조정해야 할 수도 있습니다 $
.