Getopts 옵션 처리, 하이픈이 없는 [FILE]을 추가할 수 있습니까?

Getopts 옵션 처리, 하이픈이 없는 [FILE]을 추가할 수 있습니까?

저는 getopts고급 옵션 구문 분석이 필요한 모든 스크립트를 사용하고 있으며 에서 작동합니다 . 및 으로 구성된 dash표준 의 기본 사용법에 익숙 getopts합니다 . [-x][-x OPTION]

그러한 옵션을 구문 분석하는 것이 가능합니까?

 dash_script.sh FILE -x -z -o OPTION
 ## Or the inverse?
 dash_script.sh -x -z -o OPTION FILE

답변1

스크립트 매개변수는 일반적으로 옵션 뒤에 옵니다. 다른 명령(예: cp또는 ) 을 살펴보면 ls이것이 실제로 사실임을 알 수 있습니다.

따라서 처리하려면 다음을 수행하십시오.

dash_script.sh -x -z -o OPTION FILE

getopts다음과 같이 사용할 수 있습니다 .

while getopts xzo: option
do
    case "$option" in
        x) echo "x";;
        z) echo "z";;
        o) echo "o=$OPTARG";;
    esac
done
shift $(($OPTIND-1))
FILE="$1"

옵션이 처리된 후 옵션 이 아닌 첫 번째 인수(이 경우 )의 인덱스로 getopts설정됩니다 .$OPTINDFILE

답변2

Getopt는 매개변수를 재정렬하고 옵션이 아닌 모든 매개변수를 다음 뒤에 배치합니다 --.

$ getopt -o a: -- nonoption-begin -a x nonoption-middle -a b nonoption-end
-a 'x' -a 'b' -- 'nonoption-begin' 'nonoption-middle' 'nonoption-end'

옵션이 아닌 인수가 시작 부분에 있는지 꼭 알아야 하는 경우 $1호출하기 전에 옵션인지 확인하고 그렇지 않은 경우 추출 할 수 있습니다 getopt.

if [ ${1#-} = $1 ]; then
  NONOPTION=$1
  shift
fi
ARGS=$(getopt ...)

관련 정보