셸 자체의 문자열 조작 기능도 의외로 강력.
외부 명령(sed·awk) 없이도 많은 작업 가능합니다.
길이.
${#var} — 문자열 길이.
name="alice".
echo ${#name} — 5.
단순한 문자 개수.
부분 문자열.
${var:start:length} — start 위치부터 length만큼.
${name:1:3} — 1번째부터 3글자.
${name:1} — 1번째부터 끝까지.
음수 인덱스는 ${name: -3} 형식(공백 필수, 안 그러면 기본값과 헷갈림).
치환.
${var/pattern/replacement} — 첫 매치만 치환.
${var//pattern/replacement} — 모든 매치(// 두 번).
${var/#pattern/...} — 시작 매치만, ${var/%pattern/...} — 끝 매치만.
제거.
${var#pattern} — 시작 매치 짧게 제거.
${var##pattern} — 시작 매치 길게.
${var%pattern} — 끝 매치 짧게.
${var%%pattern} — 끝 매치 길게.
파일명 처리에 매우 자주 — file="path/to/name.txt".
${file##*/} — "name.txt"(베이스명).
${file%.*} — "path/to/name"(확장자 제거).
한 줄 요약
${#var} 길이, ${var:s:l} 부분 문자열, ${var/p/r} 치환, ${var#p}·${var%p} 제거.
파일명 가공(베이스명·확장자 제거)에 특히 유용.
sed·awk 없이도 처리 가능.
더 알아볼 것
- basename·dirname 명령 대안
- ${var^^} 대문자, ${var,,} 소문자
- 파일명 표준 가공 패턴