![Bash의 정규 표현식이 변수일 때만 작동하고 직접 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/129637/Bash%EC%9D%98%20%EC%A0%95%EA%B7%9C%20%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%B4%20%EB%B3%80%EC%88%98%EC%9D%BC%20%EB%95%8C%EB%A7%8C%20%EC%9E%91%EB%8F%99%ED%95%98%EA%B3%A0%20%EC%A7%81%EC%A0%91%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
그렇다면 왜 다음이 작동하고 일치 항목을 인쇄합니까?
THE_REGEX='^test\/version[0-9]+([.][0-9]+)+$'
if [[ "$SOME_VAR" =~ $THE_REGEX ]]; then
echo "Match!"
fi
다음의 경우에는 그렇지 않습니다.
if [[ "$SOME_VAR" =~ '^test\/version[0-9]+([.][0-9]+)+$' ]]; then
echo "Match!"
fi
차이점은 무엇입니까? 이는 동일한 정규식입니다.
답변1
내부에 작은따옴표를 사용하지 마십시오 [[
.
if [[ "$SOME_VAR" =~ ^test\/version[0-9]+([.][0-9]+)+$ ]]; then
echo "Match!"
fi
GNU bash 매뉴얼에서: https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs
주의:
패턴의 모든 부분을 인용하여 인용된 부분을 문자열로 일치시킬 수 있습니다..
매뉴얼에서는 이 변수를 먼저 사용하도록 권장하는 것 같습니다.
쉘 변수에 정규식을 저장하는 것은 쉘 특정 문자를 인용할 때 문제를 방지하는 유용한 방법인 경우가 많습니다. 때로는 따옴표를 사용하지 않고 정규식을 문자 그대로 지정하거나 셸의 따옴표 제거에 주의하면서 정규식에서 사용되는 따옴표를 추적하는 것이 어렵습니다. 쉘 변수를 사용하여 패턴을 저장하면 이러한 문제를 줄일 수 있습니다.
당신은 또한 볼 수 있습니다쉘 변수에 정규식을 저장하여 쉘 특정 문자를 인용하는 문제를 피하는 방법은 무엇입니까?