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