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' # 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', # 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 # - 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 # 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 # 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 # '-', 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 # arguments ne sont pas réordonnés, et apparaissent dans l'ordre de leur
# mention. # 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 # 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 à # retenue, e.g. dans l'exemple suivant, l'option -o prend une valeur et met à
# jour la variable second: # jour la variable second:
@ -2400,6 +2402,7 @@ function __po_parse_optdescs() {
# Retourner le nombre d'arguments à shifter # Retourner le nombre d'arguments à shifter
local -a optdescs_ local -a optdescs_
local optdesc_ option_ name_ flag_ value_ local optdesc_ option_ name_ flag_ value_
local reset_
local shift_ local shift_
local i_ count_ local i_ count_
@ -2409,6 +2412,10 @@ function __po_parse_optdescs() {
shift shift
let shift_=$shift_+1 let shift_=$shift_+1
break break
elif [ "$1" == "%" ]; then
reset_=1
shift
let shift_=$shift_+1
elif [ "$1" == "-" -o "$1" == "+" ]; then elif [ "$1" == "-" -o "$1" == "+" ]; then
# annuler les précédentes options + ou - # annuler les précédentes options + ou -
if [ "${opts_#+}" != "$opts_" ]; then if [ "${opts_#+}" != "$opts_" ]; then
@ -2457,8 +2464,10 @@ function __po_parse_optdescs() {
if [[ "$2" == *=* ]]; then if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée # la valeur mentionnée est toujours ignorée
name_="${2%%=*}=" name_="${2%%=*}="
[ -n "$reset_" ] && eval "$name_="
else else
name_="$2" name_="$2"
[ -n "$reset_" ] && array_new "$name_"
fi fi
flag_=:: flag_=::
elif [[ "$optdesc_" == *: ]]; then elif [[ "$optdesc_" == *: ]]; then
@ -2466,13 +2475,16 @@ function __po_parse_optdescs() {
if [[ "$2" == *=* ]]; then if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée # la valeur mentionnée est toujours ignorée
name_="${2%%=*}=" name_="${2%%=*}="
[ -n "$reset_" ] && eval "$name_="
else else
name_="$2" name_="$2"
[ -n "$reset_" ] && array_new "$name_"
fi fi
flag_=: flag_=:
else else
option_="$optdesc_" option_="$optdesc_"
name_="$2" name_="$2"
[ -n "$reset_" ] && eval "$name_="
flag_= flag_=
fi fi