Как обрабатывать оболочки getopts с параметром, содержащим пробелы

Я ищу способ обработки аргументов, содержащих пробелы, которые нужно разобрать командой shell getopts.

while getopts ":a:i:o:e:v:u:" arg
  do
  echo "ARG is: $arg" >> /tmp/submit.log
  case "$arg" in
  a) arg1="$OPTARG" ;;
  i) arg2="$OPTARG" ;;
  o) arg3="$OPTARG" ;;
  ...
  u) argn="$OPTARG" ;;
  -) break ;;
  \?) ;;
  *) echo "unhandled option $arg" >> /tmp/submit.log ;;
  ?) echo $usage_string
     exit 1 ;;
  esac
done

Теперь, если -u имеет аргумент типа "STRING WITH WHITE SPACE" чем только первая часть строки запускается, а цикл while не подходит к концу.

большое спасибо.

Ответ 1

Как отмечает Mat, ваш фрагмент script уже прав. Если вы вызываете свой script из оболочки, вам нужно правильно указывать аргументы, например.

myscript -u "string with white space"
myscript -u 'string with white space'
myscript -u string\ with\ white\ space
myscript -u string' w'ith\ "whi"te" "''space

Требование, чтобы эти кавычки не были дефектом в вашем script, это то, как работает вызывающая оболочка. Все программы, скрипты или другие, принимают аргументы как список строк. Кавычки в вызывающей оболочке используются для сортировки этих аргументов в отдельные "слова" (элементы списка). Все вызовы выше (из оболочки unix) передают список из трех строк в script: $0 - это имя script (myscript), $1 is -u и $2 равно строка string with white space.