
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를 반환합니다. 이는 많은 언어의 정규식 표기법과 다릅니다.