C.W.K.
Stream
Lesson 02 of 05 · published

Parameter expansion 심화

~13 min · parameter-expansion, default, substitute

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

평생 쓸 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 만으로 가능.

Code

실전 one-liner·bash
file=/path/to/document.tar.gz
echo "${file##*/}"      # document.tar.gz   (basename)
echo "${file%/*}"       # /path/to          (dirname)
echo "${file%.gz}"      # /path/to/document.tar
echo "${file%%.*}"      # /path/to/document
name=pippa
echo "${name^^}"       # PIPPA

External links

Exercise

path=/Users/me/notes/idea.md 설정. 다섯 expansion 다 실행: ${path##*/}, ${path%/*}, ${path%.md}, ${path//\//-}, ${#path}. 가장 자주 쓰는 셋 외워 — 보통 basename, dirname, suffix 제거.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.