Случилась со мной необходимость скрипт написать который принмает на вход параметры в виде:
./script -a aaa bbb ccc -b aaa bbb ccc -c ... и т.п.
естественно количество этих самых "aaa bbb ccc" величина неизвествная
Первым делом кинулся я на изучение getopt и того как с ним работать. Как ни гуглил а способа получить список параметров для ключа я не нашел. Везде изымается ток один параметр.
Решил тогда я написать свою реализацию оного дела ибо скрипт нужен а сколько я еще потрачу на поиски способа уговорить getopt сделать то что мне надо - неизвестно.
Приветствуйте велосипед. только баш.. ну и немного седа.
function parseprm()
{
result=$1
shift
pn=$1
shift
ap=$*
while [ $(expr index "$ap" "-") != "0" ]
do
flet=${ap:$(expr index "$ap" "-"):1}
if [ "$flet" = "$pn" ]
then
ap=${ap:$(expr index "$ap" "-")}
if [ $(expr index "$ap" "-") = "0" ]
then
result=$(echo ${ap:1} | sed 's/^ *//;s/ *$//')
break
else
needlen=$(expr index "$ap" "-")
result=$(echo ${ap:1:$(expr $needlen - 2)} | sed 's/^ *//;s/ *$//')
break
fi
else
ap=${ap:$(expr index "$ap" "-")}
fi
done
echo $result
return 0
}
вызывать так
echo $(parseprm null b hhh jjj -a yyy fddfd -b fgg -c jjsl jjf)
где 'null' это параметр по умолчанию т.е. вернется если
нужной опции найти не получится
'b' - ключ без минуса для которого нужно получить параметры
ну и остальное непосредственно строка для разбора
кстати если ключ есть а параметров для него нет
то вернется пустое значение
З.Ы. тут код немножко уезжает за страничку.. править не буду
Upd: Исправил ошибку в седе для откусывания конечностей
