Как обрабатывать оболочки 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
.
Ответ 2
ловушка для молодых игроков (т.е. меня!)
остерегайтесь такой строки:
main [email protected]
что вам действительно нужно:
main "[email protected]"
иначе getopts
уменьшит ваши варианты на маленькие куски
http://www.unix.com/shell-programming-scripting/70630-getopts-list-argument.html