Как я могу принять длинные аргументы, используя getopts в Bash?

Я пытаюсь получить мой getops функция запускается с несколькими флагами и аргументами, но вместо short (-f стиль), хочу принять длинный (--flag стиль). Например:

if [ $# -lt 1 ]; then
  usage >&2
  exit 1
else
  while $1 "hf:" opt; do
    case $opt in
       h)
          echo "Here is the help menu:"
          usage
          ;;
       f)
          ls -l $OPTARG >&2
          ;;
       \?)
          echo "Invalid option: -$OPTARG" >&2
          ;;
        :)
          echo "Option -$OPTARG requires an argument" >&2
          exit 1
          ;;
    esac
  done
fi

Я хотел бы -h а также -f быть --help а также --file соответственно.

Как я могу это сделать?

1 ответ

getopt сделаю это для вас. Он обрабатывает короткие параметры, длинные параметры, параметры с аргументами и без них, -- завершить разбор опций и многое другое.

Использование Boilerplate выглядит следующим образом:

options=$(getopt -o hf: -l help,file: -n "$0" -- "$@") || exit
eval set -- "$options"

while [[ $1 != -- ]]; do
    case $1 in
        -h|--help) echo "help!"; shift 1;;
        -f|--file) echo "file! $2"; shift 2;;
        *) echo "bad option: $1" >&2; exit 1;;
    esac
done
shift

# Process non-option arguments.
for arg; do
    echo "arg! $arg"
done
Другие вопросы по тегам