optind 예제

이전 예제의 문제는 OPTIND가 전역 변수라는 것입니다. sourceall 호출 getopts 후, OPTIND의 값은 최종 옵션 인덱스를 반영 하도록 업데이트 됩니다. 메서드의 나중에 sourceall 소스 파일을 호출할 때 OPTIND의 값은 여전히 sourceall의 초기 getopts 호출에서 설정 됩니다. 이렇게 하면 소스 파일에서 getopts 호출이 잘못된 위치에서 시작됩니다! 다음 간단한 예제 프로그램은 getopt()를 사용하여 두 가지 프로그램 옵션을 처리합니다. 및 -t val을 통해 관련 값을 예상합니다. 이 문제를 동기를 부여하기 위해 개인 점 파일에서 적응 된 예제가 있습니다. 먼저 소스 셸을 기본 으로 감싸는 소스 파일이라는 함수를 정의합니다. 단순하게 소스 파일에 대한 전체 코드를 제공하지는 않지만 나머지 함수는 -v 플래그가 전달 될 때 자세한 오류 / 통지 메시지를 인쇄합니다. 이것은 실제로 사실이 아닙니다. 순열은 예제에서 볼 수 있듯이 마지막 옵션을 검색한 후에 발생합니다. 그러나 효과는 동일합니다. argv는 비옵션이 끝에 있도록 변기되고 옵트인드는 첫 번째 비옵션을 인덱싱하도록 수정됩니다. 긴 옵션에 대해 결과가 반환되는 방법을 지정합니다.

플래그가 NULL이면 getopt_long()이 val.를 반환합니다(예: 호출 프로그램은 val을 동등한 짧은 옵션 문자로 설정할 수 있음). 그렇지 않으면 getopt_long()은 0을 반환하고 플래그는 옵션이 있는 경우 val으로 설정된 변수를 가리키지만 옵션을 찾을 수 없는 경우 변경되지 않은 상태로 남아 있습니다. 많은 응용 프로그램이 그래픽이며 창 시스템에서 창 관리자에 의해 시작되지만 많은 응용 프로그램은 대화형 명령줄 셸 또는 셸 스크립트(제어 논리와 함께 명령 시퀀스) 내에서 사용하도록 설계되었습니다. 명령줄의 매력과 힘의 대부분은 명령의 출력을 파일이나 파이프를 통해 다른 명령으로 리디렉션하는 기능입니다. 예를 들어 getopts에 대한 호출 전에 OPTIND=1을 수동으로 설정하는 것이 하나의 해결책입니다. 이 패턴을 권장 하는 사람들의 몇 가지 예를 발견, 예를 들어이 재귀 getopts 예제에서. 이 작업이 작동할 수도 있지만 OPTIND를 로컬 변수로 선언할 수 있는 더 좋은 방법이 있습니다. 위의 예제에서는 다음과 같은 함수를 조정합니다. getopt 처리 옵션이 완료되면 변수를 설정한 다음 확인하여 이 작업을 수행할 수 있습니다.

예를 들어 아래 예제에서는 -f를 필수로 설정하기 때문에 이 예제에서는 플래그 -h 및 -x를 허용하고 인수가 있는 옵션 -f를 허용하는 스크립트가 있습니다. 스크립트는 위치 인수의 수를 가지고 있습니다.

Posted in Uncategorized