스크립트가 -v -f file 같은 옵션을 받을 때 일일이 case로 처리하기 번거로움.
getopts가 「짧은 옵션」 파싱을 표준화합니다.
기본 사용.
while getopts "vf:" opt; do / case "$opt" in / v) verbose=1 ;; / f) file="$OPTARG" ;; / esac / done.
"vf:"의 콜론은 「인자가 있는 옵션」 표시.
-v 같은 플래그, -f filename 같은 인자.
동작.
getopts가 한 옵션씩 파싱해 $opt에 저장.
인자가 있으면 $OPTARG에.
while 루프가 모든 옵션 처리.
파싱 후 shift $((OPTIND-1))로 위치 인자만 남김.
한계.
POSIX getopts는 「짧은 옵션」(-v)만, 「긴 옵션」(--verbose)은 안 됨.
긴 옵션 필요하면 GNU getopt(다른 도구) 또는 수동 파싱.
대안.
1) GNU getopt — 긴 옵션 지원, 호환성 약간 까다로움.
2) argbash — 옵션 파서를 자동 생성.
3) python click을 inline 호출.
4) 수동 case + shift 패턴.
단순 스크립트는 getopts, 복잡한 CLI는 다른 언어로 옮기는 게 깔끔할 수도.
한 줄 요약
getopts는 짧은 옵션 파싱 표준.
"vf:" 형식(콜론은 인자 있음), $opt·$OPTARG·OPTIND 활용.
긴 옵션(--verbose)은 GNU getopt 또는 수동.
단순은 getopts, 복잡은 다른 언어.
더 알아볼 것
- GNU getopt 사용법
- argbash — 자동 생성
- docopt — 도움말로 파서 정의