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

Я пытаюсь запустить мою функцию getops с несколькими флагами и аргументами, но вместо короткого (стиль -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 Ответ

0 голосов
/ 03 мая 2018

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
...