Я смотрю, есть ли способ для getopts
обрабатывать переключатели с помощью строки вместо символов.
Например, я хотел бы указать что-то вроде этого:
script.ksh -file1 file1.txt -file2.txt
Вместо:
script.ksh -f file1.txt -g file2.txt
Возможно ли это с unix getopts
?
Нет, это невозможно с getopts
. Вы должны выполнить свой собственный синтаксический анализ, например с переключателем корпуса
:
while (($# > 0))
do
case "$1" in
-file1)
shift
file1=$1;;
-file2)
shift
file2=$1;;
esac
shift
done
Внешний getopt
(без «s») может обрабатывать длинные параметры, но у него есть свои недостатки.
Из BashFAQ / 035 :
Никогда не используйте getopt (1). getopt не может обрабатывать пустые строки аргументов или аргументы со встроенными пробелами. Пожалуйста, забудьте, что он когда-либо существовал.