getopt 또는 getopts("s" 포함) 중 어느 것이 더 표준적입니까?

getopt 또는 getopts("s" 포함) 중 어느 것이 더 표준적입니까?

리눅스 재단표준 유틸리티 목록포함되지만 getopts포함되지 않습니다 getopt. 비슷하다그룹 열기Posix 유틸리티 목록.

동시에,Wikipedia의 표준 Unix 명령 목록포함되지만 getopt포함되지 않습니다 getopts. 마찬가지로 Linux용 Windows 하위 시스템(Ubuntu 기반, Debian 기반)도 포함되어 있지만 getopt포함되지는 않습니다 getopts.GNU 향상된 버전).

balter@spectre:~$ which getopt
/usr/bin/getopt
balter@spectre:~$ getopt -V
getopt from util-linux 2.27.1
balter@spectre:~$ which getopts
balter@spectre:~$ 

그렇다면 보다 표준적인 Linux 배포판(예: Debian, Red Hat, Ubuntu, Fedora, CentOS 등) 중 하나를 사용하는 사람에게 가장 자신 있는 배포판을 선택하려면 어떤 것을 선택해야 합니까?

노트:

내장과 실행 파일을 설명해준 Michael과 Muru에게 감사드립니다. 방금 우연히 발견했어요이것bash 내장 기능이 나열되어 있습니다.

답변1

which잘못된 도구입니다. getopts대개역시 내장형이군요:

현재 쉘 실행 환경에 영향을 주기 때문에 getopts일반적으로 쉘의 일반 내장으로 제공됩니다.

~ for sh in dash ksh bash zsh; do "$sh" -c 'printf "%s in %s\n" "$(type getopts)" "$0"'; done
getopts is a shell builtin in dash
getopts is a shell builtin in ksh
getopts is a shell builtin in bash
getopts is a shell builtin in zsh

쉘 스크립트를 사용하는 경우에는 이를 안전하게 사용할 수 있습니다 getopts.다른 이유들한쪽을 선호 getopts하지만기준.

또한보십시오:" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?

답변2

또한 다음과 같은 이유로 getopts이 작업을 선호합니다 .getopt

getopt결점

  1. 외부 유틸리티
  2. 레거시 버전에서는 빈 매개변수 문자열이나 공백이 포함된 매개변수를 처리할 수 없습니다.

getopts이점

  1. 모든 POSIX 셸에서 작동하며 이식 가능합니다.
  2. -a -b다음 제품과 잘 어울립니다.-ab

관련 정보