tail head cat sleep
QR code linking to this page

Man page  — GETOPT

명칭

getopt – 명령행 옵션의 해석을 실시한다

내용

서식


args=getopt ; errcode=$? ; set -- $args

해설

getopt 유틸리티는, 시르프로시쟈에 의해 간단하게 해석할 수 있도록(듯이) 명령행상의 옵션을 분리합니다. 그리고, 올바른 옵션일까를 확인합니다. optstring (은)는, 인식되는 옵션 캐릭터의 캐릭터 라인입니다 ( getopt(3) (을)를 참조). 옵션 캐릭터의 후에 코론 (``:'')이 있는 경우, 그 옵션은, (공백 캐릭터로 단락지어지고 있을지도 모르다) 인수를 가지게 됩니다. 특별한 옵션 ‘--’ (은)는, 옵션의 끝을 구별하기 위해서 사용됩니다. getopt 유틸리티는, 옵션의 마지막에 인수로서 ‘--’ (을)를 배치합니다. 또는, 그것이 햇빛에 사용되었을 때는 그것을 끝이라고 인식합니다. 셸 변수 ($1 $2 ...)(은)는, 개개의 옵션이 ‘-’ 에 계속되도록(듯이) 재설정됩니다. 그리고, 그것 자신을 셸 변수로 합니다. 각 옵션 인수는, 똑같이 그것용의 셸 변수에 넣어집니다.

사용예

이하의 코드의 단편은, 인수 없음의 -a, -b 옵션과 인수 있는 -o 옵션을 취하려 하고 있는 명령을 위해서(때문에), 어떻게 해 인수를 처리하는지를 나타내고 있습니다.

args=getopt abo: $*
# getopt abo: "$@" 를 사용해 되지 않습니다.
# 이하의 set 명령와는 다른 것처럼, 당겨 수를 해석해 버리기 (위해)때문입니다.
if [ $?  ! = 0 ]
then
        echo 'Usage: ...'
        exit 2
fi
set -- $args
# set 명령을, 박크크트 한 getopt 와 함께, 직접 사용할 수 없습니다.
# getopt 의 종료 코드가 set 의 것으로 숨겨져 버리기 때문입니다.
# set 의 종료 코드는 0 으로 정의되고 있습니다.
for i
do
        case "$i"
        in
                -a|-b)
                        echo flag $i set; sflags="${i#-}$sflags";
                        shift;;
                -o)
                        echo oarg is "'"$2"'"; oarg="$2"; shift;
                        shift;;
                --)
                        shift; break;;
        esac
done
echo single-char flags: "'"$sflags"'"
echo oarg is "'"$oarg"'"

이 코드는, 이하의 (명령 지정의) 예의 어떤 것에서도 똑같이 받아들입니다.

cmd -aoarg file file
cmd -a -o arg file file
cmd -oarg -a file file
cmd -a -oarg -- file file

관련 항목

sh(1), getopt(3)

진단

getopt 유틸리티는, optstring 안에 포함되지 않은 옵션 캐릭터를 만났을 때에, 표준 에러 출력에 에러 메세지를 표시해, 0 보다 큰 상태로 종료합니다.

역사

Bell Labs 의 메뉴얼을 바탕으로, Henry Spencer 하지만 썼습니다. 행동은, Bell Labs 판과 같다라고 믿고 있습니다. 사용예는 FreeBSD 버젼 3.2 로 4.0 으로 변경했습니다.

버그

getopt(3) 하지만 가지고 있는 버그는, 그대로 가지고 있습니다.

공백 캐릭터나 쉘의 메타캐라크타를 포함한 인수는, 일반적으로 원인 채 남지 않습니다. 이것은 고치는 것은 간단하게 생각됩니다만, 그렇지는 않습니다. getopt (이)나 본메뉴얼의 사용예를 고치려고 하는 사람은, FreeBSD 안의 이 파일의 히스토리를 확인해야 합니다.

부정한 옵션에 대한 에러 메세지는, getopt (을)를 실행하는 시르프로시쟈로부터 돌려주는 것이 아니라, getopt (으)로부터 돌려주어집니다. 이것도 고치는 것은 곤란합니다.

쉘 옵션의 값을 분리하는 것 없고, 인수를 지정하기 위한 set 명령을 사용하기 위한 매우 좋은 방법은, 쉘의 버젼을 바꾸는 것입니다.

당겨 수를 부분적으로 올바르게 해석하기 위해서, 각 셸 스크립트는 (전기 사용 예의 같은) 복잡한 코드를 가질 필요가 있습니다. 보다 좋은 getopt 적 툴은, 복잡한 부분의 대부분을 툴안으로 이동해, 클라이언트의 셸 스크립트를 단순하게 하는 것이지요.


GETOPT (1) April 3, 1999

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

Unix is the answer, but only if you phrase the question very carefully.
— Belinda Asbell