옵션 값을 직접 얻으려면 getopt를 사용하십시오.

옵션 값을 직접 얻으려면 getopt를 사용하십시오.

나는 그것에 대한 경험이 많지 않지만 getopt내가 본 모든 코드에서 프로그램 매개변수를 재정렬한 다음 스위치/케이스를 사용하여 사용 중인 옵션과 매개변수를 디코딩하는 데만 사용되므로 일반적으로 구문 분석이 필요합니다. (또는 생략) 동시에 모두.

이 작업을 수행하고 싶지 않고 대신 옵션을 사전으로 처리하고 실제로 필요할 때 선택하면 어떻게 되나요? 이와 유사한 것은 get_option_value -o "x:"실제 매개변수 값 또는 플래그의 참/거짓을 반환합니다.

분명히 이 작업은 수동으로 쉽게 수행할 수 있고 복잡성 측면에서 항상 더 효율적이지만 이러한 "사용하기 쉬운" 기능이 실제로 존재한다고 생각하지만 우연히 발견하지는 않았습니다.

답변1

먼저, bash를 사용하는 경우 를 실행하세요 . 그러면 bash가 무엇인지, 무엇을 하는지 help getopts에 대한 좋은 개요가 제공됩니다 . getopts그렇지 않으면 getopts쉘의 매뉴얼 페이지를 검색하십시오.

그렇긴 하지만 특정 옵션을 검색하는 것이 아니라 다음 명령줄 인수(항상 에 있음 ) getopts를 얻는다는 점에 유의하는 것이 중요합니다. "$1"옵션(및 해당 인수)을 사용하여 작업을 수행하고 명령줄에서 해당 옵션을 제거하는 것은 스크립트에 달려 있습니다.

이는 optstring검색 문자열이 아니라 유효성 검사 문자열입니다. getopts어떤 옵션이 유효한지, 오류 메시지를 인쇄할 수 있도록 인수를 허용해야 하는지 여부를 알려주거나 스크립트가 옵션 처리 오류가 발생했음을 알 수 있도록 하여 적절한 조치를 취할 수 있도록 허용합니다. 조치 조치.

스크립트에서 언제/장소에서 특정 옵션을 찾으려면 다른 프로그램이 수행하는 작업을 수행하고 스크립트가 실행된 직후 옵션을 구문 분석하고 결과를 변수에 저장해야 합니다.

즉, 하기 싫다고 말한 것을 해야 한다. 그것을 사용하고 싶다면 다른 방법은 없다 getopts.

명령줄에서 특정 옵션(및 해당 값)을 검색하기 위해 자신만의 프로그램이나 함수를 작성하는 것을 막을 수는 없지만 아무도 그렇게 하지 않는 이유는 의미가 없습니다. 루프에서 모든 옵션을 구문 분석하는 것이 더 쉽고 효율적입니다. 옵션을 임시 쿼리로 구문 분석/검색하는 대신 한 번에 검색 루틴/함수가 호출될 때마다 옵션과 인수를 반복해야 하기 때문에 쉘 함수인 경우 스크립트 복사본을 사용하거나 getopts반복해야 합니다 . 독립 실행형 프로그램인 경우 libc 함수를 사용하십시오."$@"getopt()

이를 수행하는 일반적인 방법은 변수를 기본값(있는 경우)으로 설정한 다음 각 옵션을 처리하여 옵션이 표시될 때 기본값을 변경하는 것입니다.

매우 간단한 예에서는 x와 y가 인수를 허용하고 b는 부울입니다.

x=10
y=20
b=0
while getopts "x:y:b" opt; do
  case "$opt" in
    x) x="$2" ; shift ;;
    y) y="$2" ; shift ;;
    b) b=1 ;;
  esac
  shift
done
echo "x=$x"
echo "y=$y"
echo "b=$b"

답변2

getopts변수를 (재)설정하여 매개변수 목록을 여러 번 검색할 수 있습니다 OPTIND. 이것배쉬 매뉴얼설명하다

getopts쉘 스크립트에서 위치 인수를 구문 분석하는 데 사용됩니다. optstring에는 인식할 옵션 문자가 포함되어 있습니다. 문자 뒤에 콜론이 오면 옵션에는 인수가 있어야 하며 인수와 분리되어야 합니다.공백. 콜론(':')과 물음표('?')는 옵션 문자로 사용할 수 없습니다. 호출될 때마다,getopts쉘 변수명에 다음 옵션을 넣고, 존재하지 않으면 이름을 초기화하고, 처리할 다음 인수의 인덱스를 변수에 넣는다.OPTIND.OPTIND로 초기화됩니다1쉘이나 쉘 스크립트가 호출될 때마다. 옵션에 인수가 필요한 경우 getopts는 인수를 변수에 넣습니다.OPTARG.쉘이 재설정되지 않습니다OPTIND자동으로, 새로운 매개변수 세트를 사용하려면 동일한 쉘 호출에서 getopts 호출 사이에 수동으로 재설정해야 합니다.

또한 원래 매개변수 세트를 사용할 필요가 없다고 언급합니다.

getopts일반적으로 위치 인수는 구문 분석되지만 더 많은 인수가 제공되는 경우아르기닌가치,getopts대신 구문 분석하십시오.

관련 정보