하위 명령과 긴 옵션만 포함된 Bash 스크립트

하위 명령과 긴 옵션만 포함된 Bash 스크립트

짧은 옵션 대신 하위 명령 및 긴 옵션과 함께 getoptor 를 사용하는 방법은 무엇입니까 ? getopts나는 단기 및 장기 옵션을 구현하는 방법을 알고 있습니다 getopts. 지금까지 내가 찾은 해결책은 getopts하위 명령에 switch-case를 사용하는 것이지만 다음과 같은 짧은 옵션을 사용하는 것입니다.

https://stackoverflow.com/questions/402377/using-getopts-to-process-long-and-short-command-line-options

옵션이 아닌 매개변수 뒤의 옵션을 구문 분석하려면 getopts를 사용하세요.

예를 들어, 다음 하위 명령과 긴 옵션을 어떻게 구현할 수 있습니까? :

 $> ./myscript.sh help
show
show --all
set
set --restart
reset
reset --restart
help

답변1

함수에서 수동으로 구문 분석하고 "$@"호출 후 나머지 비옵션은 등에 있습니다 $1. $2이 예에서는 스위치를 유지하기 위해 연관 배열을 사용하고 있습니다. bash 3 이상이 없으면 전역 변수를 사용할 수 있습니다.

하위 명령은 args[0] 및 나머지 옵션입니다.

usage() { 
  echo "${0##*/} [options...] args ... "
}
version() { 
  echo "0.1"
}

parse_opt() {
  while [[ -n "$1" ]]; do
    case "$1" in
    --) break ;; 
    
    ## Your options here:
    -m) opts[m]=1 ;;
    -c|--center) opts[c]="$2" ; shift ;;
    -x) opts[x]=1 ;;

    ## Common / typical options
    -V) version; exit 0 ;;
    --version) 
        version; exit 0 ;;
    -?|--help)
        usage ; exit 0 ;;
    -*)
        echo >&2 "$0: Error in usage."
        usage
        exit 1
        ;;
    *)  break ;;
    esac
    shift
  done
  args=("$@")
}

declare args
declare -A opts # assoc array
parse_opt "$@"

case "${args[0]}" in
  sub1)  
    "${args[@]}" ;;
  *) 
    echo >&2 "Unknown sub-command"
    exit 1
esac

관련 정보