평생 쓸 expansion 형식
bash 와 zsh 가 풍부한 parameter expansion 언어를 공유. 이 패턴들이 손에 익으면 작은 조작 절반 정도는 sed 안 꺼내도 돼.
Default
${var:-default}— var 값, unset/빈 값이면 default.${var:=default}— 같음 + default 를 할당.${var:+alt}— var 가 설정돼 있으면 alt, 아니면 빈 값. 역.${var:?error}— unset/빈 값이면 에러로 종료. 필수 env 변수에 좋음.
길이
${#var} # 문자열 길이
${#arr[@]} # 배열 길이Substring
${var:5} # 5 번째 char 부터 끝
${var:5:3} # 5 부터 3 chars
${var: -4} # 마지막 4 chars (공백 주의!)앞에서 trim
${var#prefix}— prefix glob 의 최단 매치 제거.${var##prefix}— 최장 제거.
path=/usr/local/bin
echo ${path#*/} # usr/local/bin
echo ${path##*/} # bin (basename!)뒤에서 trim
${var%suffix}— suffix 최단 매치 제거.${var%%suffix}— 최장 제거.
file=foo.tar.gz
echo ${file%.gz} # foo.tar
echo ${file%%.*} # foo치환
${var/from/to}— 첫 매치.${var//from/to}— 모든 매치.${var/#from/to}— 시작에서만.${var/%from/to}— 끝에서만.
대소문자
${var^^} # 대문자 (bash 4+)
${var,,} # 소문자
${var^} # 첫 글자만 대문자왜 외워?
shell 안에서 fork 없이 실행 — 같은 일을 sed/awk 띄워서 하는 것보다 자릿수 빠름. shell 의 한 줄 텍스트 조작 대부분이 parameter expansion 만으로 가능.