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 |
반응형