Как я могу принять длинные аргументы, используя 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