オプションを追加するために、私のスクリプトの1つに次のものがあります。
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