getopts를 사용하여 구문 분석 된 항목을 가져온 후 남은 인수를 얻으려면 어떻게해야합니까?


14

getopts를 사용하여 일부 인수를 bash 스크립트로 구문 분석하고 옵션 목록에 포함되지 않은 나머지 인수에 액세스하려고합니다. 예를 들어 전화가 오면

% script -a -b param -c param -d other arguments here

나는 :

while getopts "ab:c:d" opt ; do
.
done

getopts에 의해 처리되지 않아야하는 "여기 다른 인수"를 얻는 가장 쉬운 방법은 무엇입니까?

답변:


17

인수를 구문 분석하거나 넣을 때 이동해야합니다.

구문 분석을 마친 후 $ ((OPTIND -1))을 이동 한 다음 일반적인 방법으로 처리하십시오.

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
각 getopts가 실행 된 후 $ OPTIND가 다음에 고려할 옵션의 색인이라고 설명 할 가치가 있습니다. 따라서 $ *는 첫 번째 유효한 호출에 이어 2이고, 두 번째 호출에 따라 3 개의 매개 변수를 포함합니다. 호출이 유효하지 않으면 이전 값으로 끊어집니다. 따라서 매개 변수 1이 유효하지 않으면 OPTIND는 1이됩니다 (따라서 위의 예 shift $(expr 1 - 1)는 안전합니다)
sibaz

0

구문 분석이 끝날 때 $ @ 변수를 이동하면 행의 끝이 포함됩니다.

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.