2013-06-25 3 views
3

최근이 같은 쉘 스크립트에 인수를 전달하는 시도 :셸 : 옵션 매개 변수를 선택적이 아닌 매개 변수 뒤에 구문 분석 할 수 있습니까?

$./myscript.sh <sourcefile> <destinationfile> -o 

스크립트는은 SourceFile과의 DestinationFile에 읽어야합니다 - 모두 의무적으로해야한다 - 그리고 결국 추가 선택적 매개 변수를 확인합니다. 그러나 옵션 -ogetopts으로 구문 분석하려고 시도하면 찾을 수 없습니다. 항상 "거짓"또는 "0"입니다. 다른 매개 변수보다 먼저 전달 된 경우에만 -o 옵션을 인식합니다!

$./myscript.sh -o <sourcefile> <destinationfile> 

이 방법으로 만 작동해야합니까? 내가 규칙, 관례 또는 스크립트 연습을 할 때 나는이 필수 정보를 찾지 못해서 많은 시간을 낭비하는 시행 착오를 통해서만 그것을 발견 할 수있다 ... 또한 복사 명령 과정이 어떻게 작동하는지 궁금하다. 선택 사항이 아닌 옵션 매개 변수와 함께 선택 가능

+1

getopts를 호출하기 전에 항상 처음 두 매개 변수를 캡처하고 제거 할 수 있습니다. –

+0

그건 결국 이해가됩니다. 이전에 그것들을 앞에 놓으려고했으나 getopts를 호출하기 전에 그들을 멀리 옮기는 것을 잊었다. 그래서 그것은 작동하지 않았다. 고마워, 바로 이걸 시험해 볼거야! – Malvin

답변

2

유닉스에서 전통적으로 선택 매개 변수는 최소한 대부분의 쉘 유틸리티에서 왔으며 쉘 유틸리티 작성에 대해서는 Posix recommendation입니다. bash 기본 제공 getopts은이 사용 사례를 위해 설계되었습니다. 명령 줄 매개 변수의 순서를 바꾸지 않는 한 getopts은 옵션 매개 변수가 처음 인 경우에만 작동합니다.

그러나 대부분의 gnu 유틸리티는 gnu getopt 또는 getopt_long C API를 사용하며, 둘 다 기본적으로 명령 줄에서 선택적 매개 변수를 사용할 수 있습니다. POSIX 쉘 유틸리티를 사용하더라도 표준에 대한 몇 가지 예외가 있습니다. 한마디로

:

  • 당신은 항상 첫 번째 선택적 매개 변수를 넣어 안전해야하지만, 어떤 경우에는 당신이 bashgetopts 내장 실질적를 사용하여 마지막에 기록 된

  • utilies를 넣어 수 있습니다 항상 선택적 매개 변수가 필요합니다.

  • 대부분의 Gnu 유틸리티는 혼합 매개 변수와 선택적 매개 변수를 조합합니다.