1
Так что мой Getopt код выглядит следующим образом:getopt не поддерживает пробелы между опциями в Bash?
ARG_H=0
ARG_V=0
ARG_A=0
ARG_N=5
TEMP=`getopt -o hvn:a -n "vdu" -- "$1"`
eval set -- "$TEMP"
while true ; do
case "$1" in
-h|--argh) ARG_H=1 ; shift ;;
-v|--argv) ARG_V=1 ; shift ;;
-n|--argn)
case "$2" in
"") shift 2 ;;
*) ARG_N=$2 ; shift 2 ;;
esac ;;
-a|--arga) ARG_A=1 ; shift ;;
--) shift ; break ;;
*) echo "error" ; exit 1 ;;
esac
done
echo "$ARG_H"
echo "$ARG_V"
echo "$ARG_N"
echo "$ARG_A"
Но по какой-то причине, она работает только тогда, когда моя командная строка выглядит следующим образом:
./vdu -a-v-n15
или
./vdu -avn15
но если I введите
./vdu -a -v -n 15
он зарегистрирует только первый флаг. Почему это? Этот код, похоже, идентичен учебным пособиям getopts, на которые я смотрел.
Ах, спасибо очень много. Я думал, так как я делал это внутри функции, мне пришлось передать $ @ in в качестве аргумента и использовать $! в команде getopt, что, по-видимому, не так. –