シェルスクリプトに短いパラメータを追加する方法

シェルスクリプトに短いパラメータを追加する方法

オプションを追加するために、私のスクリプトの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

関連情報