그렇다면 왜 다음이 작동하고 일치 항목을 인쇄합니까?
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
주의:
패턴의 모든 부분을 인용하여 인용된 부분을 문자열로 일치시킬 수 있습니다..
매뉴얼에서는 이 변수를 먼저 사용하도록 권장하는 것 같습니다.
쉘 변수에 정규식을 저장하는 것은 쉘 특정 문자를 인용할 때 문제를 방지하는 유용한 방법인 경우가 많습니다. 때로는 따옴표를 사용하지 않고 정규식을 문자 그대로 지정하거나 셸의 따옴표 제거에 주의하면서 정규식에서 사용되는 따옴표를 추적하는 것이 어렵습니다. 쉘 변수를 사용하여 패턴을 저장하면 이러한 문제를 줄일 수 있습니다.
당신은 또한 볼 수 있습니다쉘 변수에 정규식을 저장하여 쉘 특정 문자를 인용하는 문제를 피하는 방법은 무엇입니까?