Синтаксическая ошибка getopts оболочки Korn

Я пытаюсь написать сценарий оболочки Korn, который использует getopts для получения параметров командной строки. Пример, приведенный в книге, которую я использую, дает описание использования getopts с этим:

#!/bin/ksh
a="not selected"
b="not selected"
b_arg="not selected"
c="not selected"
c_arg="not selected"
d="not selected"

while getopts "ab#c:d" optchar ; do
   case ${optchar} in
      a)  a="selected"
          ;;                # the ;; marks the end of this case

      b)  b="selected"
          b_arg=${OPTARG}
          ;;

      \?) echo "error message goes here"
          exit 1
          ;;
   esac
done

Я пытаюсь написать сценарий оболочки Korn, который принимает -c, -l, -p, -r и -f, но когда я изменяю цикл на

c="not selected"
l="not selected"
p_arg="not selected"
p="not selected"
r_arg="not selected"
r="not selected"
f="not selected"

while getopts "clp#r:f" optchar ; do
   case ${optchar} in
     c)  c="selected"
         ;;                # the ;; marks the end of this case

Я получаю сообщение об ошибке «Синтаксическая ошибка в строке 13: 'in», но если я просто изменил переменные в строке, я не понимаю, как это вызывает синтаксическую ошибку. Спасибо за любую помощь или объяснение, которое указывает мне в правильном направлении!


person Chris    schedule 03.06.2014    source источник
comment
Вы дали нам только 12 строк сценария. Где строка 13, которая дает ошибку?   -  person rojomoke    schedule 03.06.2014
comment
Кажется, у вас есть посторонний . в вашем вопросе, который портит форматирование.   -  person chepner    schedule 03.06.2014


Ответы (1)


while getopts "ab#c:d" optchar ; do

Что там делает этот символ #? Должен быть :

while getopts "ab:c:d" optchar ; do
person glenn jackman    schedule 03.06.2014
comment
Привет, Гленн, спасибо, что нашли время ответить, я могу опубликовать весь код, если это поможет, я получаю сообщение об ошибке ksh fileOpts.ksh: не найдено [Нет такого файла или каталога]: не найдено [Нет такого файла или каталога ] ' неожиданно: строка 10: синтаксическая ошибка в строке 12: `in - person Chris; 03.06.2014
comment
Вы применили мое предложение? - person glenn jackman; 03.06.2014
comment
В документах для getopts упоминается, что опция # может быть указана только как первая опция, но мне неясно, почему это так или какое (если есть) особое значение имеет такая опция. - person chepner; 03.06.2014
comment
getopts — это встроенная функция ksh, поэтому прочитайте справочную страницу ksh для получения информации о getopts. Моя справочная страница ksh говорит, что optstring содержит буквы, которые распознает getopts. Если за буквой следует :, ожидается, что эта опция будет иметь аргумент. -- Я ничего не читал о # в строке опций - person glenn jackman; 03.06.2014