From 3aa18cd7e76cdce613ace60ebbdca18c312b6c85 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Mon, 27 Oct 2014 17:57:17 +0400 Subject: [PATCH] =?UTF-8?q?flag=20pour=20r=C3=A9initialiser=20les=20valeur?= =?UTF-8?q?s=20des=20variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/base | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/ulib/base b/lib/ulib/base index 9254820..fdeaee6 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -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