
다음 코드가 있습니다.
read -p ":" URL
regex='^(https?\:\/\/)?(www\.youtube\.com)\/.+$'
if [[ "$URL" =~ $regex ]]; then
echo "not valid url "
exit
fi
echo 'Init fnction'
Init FUnction
URL을 입력합니다:https://www.asdasd.com/watch?v=nD8WpYD_P94
그러나 스크립트는 유효하지 않은 것으로 나타납니다. 출력:
+ regex='^(https?\:\/\/)?(www\.youtube\.com)\/.+$'
+ [[ https://www.asdasd.com/watch?v=nD8WpYD_P94 =~ ^(https?\:\/\/)?(www\.youtube\.com)\/.+$ ]]
+ sleep 0.5
+ echo 'Init function...'
Init function...
이해가 안 돼요. YouTube에서 URL을 확인하는 올바른 방법은 무엇인가요?
답변1
내부는 [[ ]]
=~
부정되지 않습니다 =
.
=~
=
정규식 과는 아무 관련이 없지만 정규식 과 일치시킬 수 있는 연산자입니다 . 보다Bash의 조건부 구성, [[
거기 =~
에 설명되어 있습니다. 가장 중요한 부분:
및
=~
와 동일한 우선순위를 갖는 추가 이진 연산자 를 사용할 수 있습니다 . 이 연산자를 사용하면 연산자 오른쪽에 있는 문자열은 POSIX 확장 정규식으로 간주되어 그에 따라 일치합니다 [...].==
!=
정규식이 일치하면 테스트가 성공합니다. 귀하의 스크립트 흐름( echo "not valid"
일치 시)을 보면 귀하가 그 반대라고 생각하게 됩니다. 테스트를 무효화해야 합니다.
테스트를 무효화하려면 !
다음 앞에 배치하십시오 [[
.
if ! [[ "$URL" =~ $regex ]]; then
또는 다음 내부의 표현식을 부정할 수 있습니다 [[ ]]
.
if [[ ! "$URL" =~ $regex ]]; then
추가로 읽어주세요이해IFS= read -r line
명령 을 조정해 read
보세요.