flag pour réinitialiser les valeurs des variables

This commit is contained in:
Jephte CLAIN 2014-10-27 17:57:17 +04:00
parent ecccb58e15
commit 3aa18cd7e7
1 changed files with 13 additions and 1 deletions

View File

@ -2312,7 +2312,7 @@ function parse_opts() {
# Les arguments de cette fonction sont donc de la forme 'optdescs -- args'
# optdescs est une suite d'arguments d'une des formes suivantes: 'opt,opt... var',
# 'opt,opt... $cmd', '@ var', '+', '-'
# 'opt,opt... $cmd', '@ var', '+', '-', '%'
# - Dans la forme 'opt var[=value]', opt est une description d'option, var un
# nom de variable à mettre à jour, et value une valeur éventuelle pour les
# options sans argument. Si plusieurs options sont mentionnées, séparées par des
@ -2353,6 +2353,8 @@ function parse_opts() {
# '-', les options sont valides n'importe ou sur la ligne de commande, mais les
# arguments ne sont pas réordonnés, et apparaissent dans l'ordre de leur
# mention.
# - Toutes les variables mentionnées après le caractère '%' sont
# initialisées. Elle sont garanties d'être vides
# Si opt est définie plusieurs fois, la dernière définition est celle qui est
# retenue, e.g. dans l'exemple suivant, l'option -o prend une valeur et met à
# jour la variable second:
@ -2400,6 +2402,7 @@ function __po_parse_optdescs() {
# Retourner le nombre d'arguments à shifter
local -a optdescs_
local optdesc_ option_ name_ flag_ value_
local reset_
local shift_
local i_ count_
@ -2409,6 +2412,10 @@ function __po_parse_optdescs() {
shift
let shift_=$shift_+1
break
elif [ "$1" == "%" ]; then
reset_=1
shift
let shift_=$shift_+1
elif [ "$1" == "-" -o "$1" == "+" ]; then
# annuler les précédentes options + ou -
if [ "${opts_#+}" != "$opts_" ]; then
@ -2457,8 +2464,10 @@ function __po_parse_optdescs() {
if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée
name_="${2%%=*}="
[ -n "$reset_" ] && eval "$name_="
else
name_="$2"
[ -n "$reset_" ] && array_new "$name_"
fi
flag_=::
elif [[ "$optdesc_" == *: ]]; then
@ -2466,13 +2475,16 @@ function __po_parse_optdescs() {
if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée
name_="${2%%=*}="
[ -n "$reset_" ] && eval "$name_="
else
name_="$2"
[ -n "$reset_" ] && array_new "$name_"
fi
flag_=:
else
option_="$optdesc_"
name_="$2"
[ -n "$reset_" ] && eval "$name_="
flag_=
fi