Есть ли способ использовать строку в качестве переключателя, используя getopts? - PullRequest
1 голос
/ 05 августа 2010

Я вижу, есть ли способ для getopts обрабатывать переключатели со строками вместо символов.

Например, я хотел бы предоставить что-то вроде этого:

script.ksh -file1 file1.txt -file2.txt

Вместо:

script.ksh -f file1.txt -g file2.txt

Возможно ли это с Unix getopts?

Ответы [ 2 ]

1 голос
/ 06 августа 2010

Внешний getopt (примечание без "s") может обрабатывать длинные опции, но имеет свои недостатки.

С BASFAQ / 035 :

Никогда не используйте getopt (1). getopt не может обрабатывать пустые строки аргументов или аргументы со встроенным пробелом. Пожалуйста, забудьте, что это когда-либо существовало.

1 голос
/ 05 августа 2010

Нет, это невозможно с getopts. Вы должны сделать свой собственный анализ, например, с переключателем case:

while (($# > 0))
do
    case "$1" in
    -file1)
        shift
        file1=$1;;
    -file2)
        shift
        file2=$1;;
    esac
    shift
done
...