「명령의 출력을 변수에 담거나 다른 명령의 인자로」 사용하는 게 명령 치환.
셸 스크립트의 매우 자주 쓰는 패턴.
$(...) 형식.
files=$(ls *.txt) — ls의 출력을 변수에.
echo "Today is $(date)" — date 출력을 문자열에 끼워.
중첩 가능 — $(cmd $(other))처럼.
백틱(``) 형식.
files=`ls *.txt` — 옛 형식.
같은 효과지만 가독성 떨어지고 중첩 어려움.
모든 모던 코드는 $(...) 사용 권장.
활용 예.
1) 파일명 동적 생성: backup_$(date +%Y%m%d).tar.gz.
2) 조건부 명령 인자: rm $(find /tmp -mtime +7).
3) 변수 계산: count=$(ls | wc -l).
「출력을 다음 단계로」 거의 모든 흐름에.
주의 — 공백 처리.
files=$(ls *.txt) 후 echo $files면 공백으로 단어 분리됨.
echo "$files"로 따옴표 감싸면 한 덩어리.
파일명에 공백 있으면 더 까다로움 — 배열로 받거나 mapfile 사용.
한 줄 요약
$(...)는 명령 출력을 변수·인자로.
백틱(``)은 옛 형식, 모던은 $(...)만.
중첩 자유.
출력의 공백·줄바꿈 처리 주의 — "$var"로 따옴표 감싸기 안전.
더 알아볼 것
- mapfile/readarray — 출력을 배열로
- 공백 안전한 패턴
- process substitution과의 차이