Dev

[Bash] 패턴 제거, 특정 패턴의 마지막 가져오기

삼쓰_웅쓰 2025. 4. 7. 01:34
반응형

커밋 메시지에 브랜치 이름을 prefix로 붙여주는 git hook 을 하나 만들다가 "/" 로 구분되는 문자열 중 마지막 문자를 가져오고 싶은 니즈가 생겼었습니다.

따라서 이걸 bash로 어떻게 하는지 간단하게 정리해봅니다.

 


 

 

"변수 안의 문자열에서, 가장 앞쪽부터 시작해 /로 끝나는 가장 긴 부분을 제거하고 나머지를 사용한다."

 

먼저 목표는 위와 같습니다.
만약 "feature/9nav"라는 문자열이 있다면, / 기준으로 가장 마지막 슬래시 이후의 문자열인 "9nav" 가져와야 합니다.

 

bash 패턴 제거

bash 의 패턴 제거는 ${변수##패턴} 와 같이 사용 합니다.

${var#pattern} 처음부터 일치하는 가장 짧은 패턴 제거
${var##pattern} 처음부터 일치하는 가장 긴 패턴 제거
${var%pattern} 끝에서 일치하는 가장 짧은 패턴 제거
${var%%pattern} 끝에서 일치하는 가장 긴 패턴 제거

 

사실 문법 자체가 강력하기 때문에 문법을 제대로 이해했다면 목표를 쉽게 이룰 수 있습니다.
"/" 로 나눈 것들 중 마지막은, "/" 로 이루어지는 패턴 중 가장 긴 패턴을 제거해주면 됩니다. 따라서 "##pattern" 이 적합합니다.

즉, 아래와 같이 쓸 수 있습니다.

BRANCH_NAME="feature/9nav"
echo ${BRANCH_NAME##*/}

9nav

 

예시에 다른 패턴들도 적용해보면 아래와 같이 정리해볼 수 있겠습니다.

${var##*/} 마지막 슬래시 이후의 값 추출 feature/9nav 9nav
${var%/*} 마지막 슬래시 이전의 값 추출 feature/9nav feature
${var%%/*} 첫 번째 슬래시 이전의 값 추출 feature/9nav feature

 

 

 

반응형