getopts가 첫 번째 문자 "-"만 읽도록 만드는 방법

getopts가 첫 번째 문자 "-"만 읽도록 만드는 방법

다음과 같이 testShell.sh사용되는 쉘 스크립트가 있습니다 .getopts

#!/bin/bash
while getopts ":j:e:" option; do
    case "$option" in
        j) MYHOSTNAME=$OPTARG ;;
        e) SCRIPT_PATH=$OPTARG ;;
        *) ;;
    esac
done

echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"

내 테스트가 다음과 같이 실행될 때:

$ testShell.sh  -jvalue1 -evalue4 -Djvalue3  -pvalue2

내가 얻는 결과는 다음과 같습니다.

j=value3
e=2
remaining=

그러나 나는 출력이 다음과 같기를 원합니다.

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

보장이 가능한가요? getopts 첫 번째 캐릭터 게시물만 보기 - 상징?-Djvalue3이렇게 하면 -jvalue3and -pvalue2로 해석되지 않습니다 -e2.

답변1

이 시도:

$ ./testShell.sh  -j value1 -e value4 -D jvalue3  -p value2
j=value1
e=value4
remaining=jvalue3 -p value2

옵션과 옵션 문자열 사이의 공백에 유의하십시오.

help getopts설명하다:

OPTSTRING contains the option letters to be recognized; if a letter
is followed by a colon, the option is expected to have an argument,
which should be separated from it by white space.

즉, 옵션과 옵션 문자열 사이에 공백이 필요합니다.

bash에 내장된 getopt가 수행할 수 있는 것 이상의 기능이 필요한 경우 /usr/bin/getopt 유틸리티는 옵션과 옵션 문자열 사이에 공백이 있거나 없는 긴 옵션과 짧은 옵션을 모두 지원합니다. 선택적 문자열 매개변수와 같은 추가 기능도 지원됩니다.

그런데 /usr/bin/getopt는 debian 및 ubuntu와 같은 파생 제품의 util-linux 패키지에서 사용할 수 있습니다. 다른 배포판이나 *nixes에 대해서는 모르지만 소스를 찾을 수 없으면 다운로드할 수 있습니다. 데비안 아카이브에서 다른 곳에서 찾으세요.

답변2

이것을 3개의 포럼에 게시하고 모든 곳에서 검색한 후... 마침내 다음을 시도했고 작동했습니다...

testShell.sh  -jvalue1 -evalue4 -- -Djvalue3  -pvalue2

알아채다

--  

뒤쪽에-evalue4

출력은 다음과 같습니다

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

나는 믿는다, --묻고 getopts, 믿는다처리 중지 옵션.

관련 정보