저는 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
설정됩니다 .$OPTIND
FILE
답변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 ...)