옵션을 추가하기 위해 내 스크립트 중 하나에 다음이 있습니다.
parse_opts() {
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
help=1
shift
;;
-r|--raw)
raw=1
shift
;;
-c|--copy)
copy=1
shift
;;
-s|--sensitive)
sensitive=1
shift
;;
-i|--insensitive)
insensitive=1
shift
;;
*)
shift
;;
esac
done
}
한 가지 문제가 있습니다. 동시에 여러 옵션을 사용할 수 없습니다. 예를 들어, using은 -r -s
유효하지만 using은 -rs
유효하지 않습니다. 별도의 항목을 추가하지 않고 프로그래밍 방식으로 작동하게 하려면 어떻게 해야 합니까? 내가 사용하는 쉘은 sh입니다.
편집: 나는 그것을 하는 방법을 알아냈습니다. 그것은 기반으로합니다이 stackoverflow 답변. 복사해서 붙여넣었지만 필요한 내용으로 대체했습니다.
새 코드:
while getopts hcsi-: OPT; do
# Support long options: https://stackoverflow.com/a/28466267/519360
if [ "$OPT" = "-" ]; then
OPT="${OPTARG%%=*}"
OPTARG="${OPTARG#$OPT}"
OPTARG="${OPTARG#=}"
fi
case "$OPT" in
h|help) help; exit 0 ;; # Call the `help´ function and exit.
c|copy) copy=1 ;;
s|sensitive) case_sensitivity="sensitive" ;;
i|insensitive) case_sensitivity="insensitive" ;;
??*) printf '%s\n' "Illegal option --$OPT" >&2; exit 2 ;;
?) exit 2 ;; # Error reported via `getopts´
esac
done
shift $((OPTIND-1)) # Remove option arguments from the argument list