bash 테스트 - 슬래시 일치

bash 테스트 - 슬래시 일치

Git 브랜치 이름이 있습니다.

current_branch='oleg/feature/1535693040'

브랜치 이름에 /feature/가 포함되어 있는지 테스트하고 싶으므로 다음을 사용합니다.

if [ "$current_branch" != */feature/* ] ; then
  echo "Current branch does not seem to be a feature branch by name, please check, and use --force to override.";
  exit 1;
fi

하지만 지점 이름이 정규식과 일치하지 않아 1로 종료합니다. 이유를 아는 사람이 있습니까?

답변1

StackOverflow에서 이 질문에 대한 답변을 얻었습니다. https://stackoverflow.com/questions/52123576/bash-test-match-forward-slashes/52123622

정답은:

[ ]단일 브래킷입니다test(1)주문하다, bash와는 다르게 패턴을 처리합니다. 대신 이중 괄호를 사용하세요.bash 조건식 [[ ]]. 예:

$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes

편집하다정규 표현식을 사용하세요:

$ [[ $current_branch =~ /feature/ ]] && echo yes
yes

정규식은 어디에서나 일치할 수 있으므로 선행 및 후행이 필요하지 않습니다 ( 정규식에 *해당 )..*

참고: 여기서 슬래시는 정규식의 구분 기호가 아니라 문자열의 어딘가에서 일치하는 리터럴입니다. 예를 들어 [[ foo/bar =~ / ]]true를 반환합니다. 이는 많은 언어의 정규식 표기법과 다릅니다.

관련 정보