짧은 옵션 대신 하위 명령 및 긴 옵션과 함께 getopt
or 를 사용하는 방법은 무엇입니까 ? getopts
나는 단기 및 장기 옵션을 구현하는 방법을 알고 있습니다 getopts
. 지금까지 내가 찾은 해결책은 getopts
하위 명령에 switch-case를 사용하는 것이지만 다음과 같은 짧은 옵션을 사용하는 것입니다.
옵션이 아닌 매개변수 뒤의 옵션을 구문 분석하려면 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