BASH getopts 옵션 이후의 추가 매개변수

BASH getopts 옵션 이후의 추가 매개변수

-h 옵션 다음에 getopts가 2개의 인수를 허용하도록 하려면 어떻게 해야 합니까? 내 말은 배열에 저장해야 하는데 작동하지 않거나 다음과 같은 실수를 하고 있다는 뜻입니다. echo "${array[1]} ${array[2]}"

 OPTIND=1 
    hh=
    while getopts "h:" flag
    do
    case "$flag" in
    h)
    hh=($OPTARG)  ;;
   esac
   done
   shift "$((OPTIND-1))"

답변1

-h한 가지 방법은 여러 번 전달하는 것입니다.

OPTIND=1 
hh=()
while getopts h: flag; do
  case "$flag" in
    h) hh+=("$OPTARG");;
  esac
done
shift "$((OPTIND-1))"

그리고 그것을 호출하십시오 :

myscript -h host1 -h host2...

답변2

이건 불가능 해. 당신이 할 수 있는 일은 적절한 구분 기호로 인용되고 구분된 두 인수를 전달한 다음 분할하여 OPTARG두 부분을 얻는 것입니다.

가능한 호출 구문의 예는 다음과 같습니다.

prog -h part1:part2

prog -h "part1 part2"

선언 에서 case예를 들어 콜론 구분 기호의 경우 다음과 같이 구성 요소를 분할할 수 있습니다.

p1=${OPTARG%:*} p2=${OPTARG#*:}

part1편집(설명): "적절한 구분 기호"는 단일 / 구성 요소 에 속하지 않는 구분 기호이므로 part2복합 내에서 고유하므로 OPTARG분할이 모호하지 않습니다.

답변3

짧은 대답: getopts이런 식으로 사용되지 않습니다.

긴 대답: 다음과 같은 것을 시도해 볼 수 있지만(테스트되지 않음) getopts구문 검사는 수행되지 않습니다.

OPTIND=1 
hh=()
args=( "$@" )
while getopts "h:" flag; do
  case "$flag" in
  h)
    hh=("$OPTARG" "${args[$OPTIND]}")
    $((OPTIND++))
    ;;
  esac
done
shift "$((OPTIND-1))"

이 경로를 사용하는 경우 자체 오류 처리를 추가해야 합니다. 예를 들어 두 번째 매개변수가 존재하지 않거나 비어 있거나 매개변수가 아닌 옵션처럼 보입니다.

관련 정보