개발 slecs

zsh 배열 인덱스 오류로 밀린 포스트 파일명 일괄 수정

목차

zsh 배열 인덱스가 1-based라는 걸 뒤늦게 깨닫고, 반자동으로 생성해둔 포스트 파일명이 전부 한 칸씩 밀려있던 걸 한꺼번에 고쳤다.

어쩌다 이렇게 됐나

포스트 파일을 생성하는 스크립트를 zsh로 짜두고 있었는데, 배열에서 인덱스로 값을 꺼내는 부분이 문제였다. bash에서 넘어온 습관대로 0-based로 짰더니, zsh는 배열 인덱스가 1부터 시작하는 탓에 매번 첫 번째 요소가 통째로 밀려나고 있었던 것.

실제로 벌어진 상황을 정리하면 이렇다:

의도한 파일명 실제로 생성된 파일명
2025-12-03-pomeranian.md (앞 항목 없음, 첫 항목 누락)
2026-01-14-bichon-frise.md 2025-12-03-pomeranian.md
2026-02-09-golden-retriever.md 2026-01-14-bichon-frise.md
2026-03-22-korean-shorthair.md 2026-02-09-golden-retriever.md
2026-04-30-puppy-names.md 2026-03-22-korean-shorthair.md

즉, 날짜와 슬러그가 한 쌍씩 어긋나서, pomeranian 포스트의 날짜가 bichon-frise 파일에 담기고, bichon-frise 내용이 golden-retriever 파일로 들어가는 식으로 전부 뒤섞여 있었음. 콘텐츠 자체를 잘못 넣은 게 아니라 파일명이 한 칸씩 밀린 거라, 사이트 빌드는 멀쩡하게 통과했고 눈으로 확인하기 전까지 전혀 몰랐다.

bash vs zsh 배열, 이 차이가 생각보다 크다

# bash — 0-based
arr=("pomeranian" "bichon-frise" "golden-retriever")
echo ${arr[0]}  # pomeranian
echo ${arr[1]}  # bichon-frise
# zsh — 1-based
arr=("pomeranian" "bichon-frise" "golden-retriever")
echo ${arr[0]}  # (empty — 없는 인덱스)
echo ${arr[1]}  # pomeranian
echo ${arr[2]}  # bichon-frise

bash 스크립트를 zsh에서 그냥 돌리거나, 반대로 zsh용 스크립트를 bash에서 실행할 때 이 부분이 조용히 틀어진다. 오류가 나는 게 아니라 그냥 빈 문자열이 나오거나 인덱스가 밀리기 때문에 로그만 봐서는 이상한 걸 잘 모름. 특히 이번처럼 파일명 생성 같은 부수 효과가 있는 작업에서는 잘못된 결과물이 조용히 쌓인다는 게 제일 위험한 지점이다.

그리고 이런 오류는:
- CI에서 검증하는 타입이 아니고
- 빌드가 터지는 게 아니라서
- 나중에 "어? 이 포스트 날짜가 왜 이러지?" 하고 직접 들어가봐야 잡힘

이번에도 pomeranian 포스트를 직접 열어보다가 발견했다.

고친 방식

영향받은 파일이 5개 — 2025-12-03-pomeranian.md, 2026-01-14-bichon-frise.md, 2026-02-09-golden-retriever.md, 2026-03-22-korean-shorthair.md, 2026-04-30-puppy-names.md — 전부 파일명을 올바른 날짜·슬러그 조합으로 맞춰 rename했다. 스크립트 자체는 인덱스를 1-based로 수정하거나, 아예 인덱스 없이 순회하는 방식으로 바꿔서 재발 방지.

# 인덱스 쓰지 않고 순회 — bash/zsh 모두 안전
for slug in "pomeranian" "bichon-frise" "golden-retriever"; do
  echo "$slug"
done

인덱스를 꼭 써야 하는 상황이면 sh shebang을 명확히 하거나, 처음부터 언어별 동작 차이를 명시적으로 주석에 남겨두는 게 낫다. 팀 안에 bash 쓰는 사람, zsh 쓰는 사람이 섞여 있으면 이 차이가 나중에 누군가의 머리를 아프게 만든다.

스크립트 쪽 자동화를 편하게 하려다가 오히려 수동 수정이 늘어난 케이스. 자동화 스크립트도 출력 결과를 한번은 직접 눈으로 확인하는 습관이 필요하다는 걸 다시 한번 느꼈다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.