Heredoc — embedded 다중 줄 문자열
cat <<EOF
Hello, $USER
Today is $(date +%Y-%m-%d)
EOF여는 토큰 (여기 EOF) 과 닫는 토큰 사이가 command 의 stdin. default 로 변수 + command substitution 펼침.
확장 비활성 — 구분자 인용
cat <<'EOF'
$USER stays literal
$(date) stays literal
EOF여는 구분자의 어떤 글자든 인용 (보통 전체 'EOF') 하면 변수 확장 OFF. 펼치면 안 되는 shell 풍 문법이 든 embedded config / 스크립트 / 템플릿에 사용.
앞 탭 제거 — <<-
cat <<-EOF
hello
world
EOF<<- 가 각 줄의 앞 탭 (공백 아님) 제거 — heredoc 을 if 블록 안에 들여쓸 때 유용.
스크립트 인자
$0— 스크립트 이름.$1 $2 ...— positional.$#— 인자 개수.$@— 전부. 항상 인용:"$@".$*— IFS 로 합친 — 보통 잘못.shift— $1 drop, 재번호.
getopts 로 flag 파싱
verbose=0
while getopts ':vo:' opt; do
case "$opt" in
v) verbose=1 ;;
o) output="$OPTARG" ;;
\?) echo "bad flag: -$OPTARG" >&2; exit 2 ;;
esac
done
shift $((OPTIND - 1))POSIX getopts 는 short flag 만. long flag 는 손으로 파싱 / bash getopt 변종 / Python argparse 로 갈아타기. 대부분 스크립트는 short-only 로 충분.