날씨 정보를 불러오는 중...

Shell 이스케이프

특수문자가 섞인 문자열을 셸이 오해하지 않도록 안전하게 인용합니다.

작은따옴표 인용 (가장 안전 — 모든 확장이 막힘)
큰따옴표 인용 ($변수 확장은 살아있음)
백슬래시 이스케이프
왜 인용이 필요한가요?

셸은 명령어를 실행하기 전에 문자열을 먼저 해석합니다. 공백은 인자 구분자가 되고, $는 변수로 치환되며, ;&&는 명령 구분자로 동작합니다. 그래서 파일명에 공백이 들어있기만 해도 의도와 다르게 동작합니다.

# 파일명이 "my file.txt"일 때
rm my file.txt     # my 와 file.txt 두 개를 지우려 시도 (실패)
rm 'my file.txt'   # 올바름
작은따옴표 vs 큰따옴표
  • 작은따옴표('...') — 안의 모든 것이 글자 그대로입니다. 변수도 치환되지 않고 명령 치환도 없습니다. 가장 안전합니다.
  • 큰따옴표("...") — 공백은 보호하지만 $변수, `명령`, \는 여전히 해석됩니다. 변수를 써야 할 때만 쓰세요.

작은따옴표 안에 작은따옴표를 넣을 수는 없습니다. 그래서 위 결과에서 '를 만나면 '\''라는 형태로 바뀌는데, 이는 "인용을 닫고 → 백슬래시로 따옴표 하나를 표현하고 → 다시 인용을 연다"는 뜻입니다. 보기엔 이상해도 이것이 표준적인 방법입니다.

변수는 항상 큰따옴표로 감싸세요

셸 스크립트에서 가장 흔한 버그 원인입니다. 변수에 공백이 들어 있으면 감싸지 않은 $var는 여러 인자로 쪼개집니다.

file="my report.pdf"
cp $file /tmp/      # 잘못됨 - 인자 2개로 쪼개짐
cp "$file" /tmp/    # 올바름
사용자 입력을 셸에 넘길 때

웹 요청 값이나 파일 내용처럼 외부에서 온 값은 인용만으로 충분하지 않을 수 있습니다. 가능하면 셸을 거치지 않고 실행하는 방식(예: Python의 subprocess.run([...])처럼 인자를 리스트로 넘기기)을 쓰는 것이 근본적인 해결책입니다. 이 도구의 결과도 사람이 직접 명령을 작성할 때 쓰는 용도로 생각하세요.

← 도구 전체 보기