ajout des noms de variables automatique

la variable de tableau n'est pas supprimée
This commit is contained in:
Jephte CLAIN 2014-10-27 17:47:55 +04:00
parent ed23ad179a
commit ecccb58e15
2 changed files with 23 additions and 13 deletions

View File

@ -1 +1 @@
006000000
007000000

View File

@ -2322,6 +2322,9 @@ function parse_opts() {
# mentionnée ('' pour aucune mention, '1' pour une seule mention, etc.), sauf si
# on utilise la forme var=value, auquel cas la variable obtient la valeur value,
# et le nombre d'occurences de l'option n'est pas compté.
# Pour faciliter la lecture:
# '--opt .' est équivalent à '--opt opt'
# '--opt: .' est équivalent à '--opt: opt='
# Avec la forme '-o:' ou '--longopt:', l'option prend un argument obligatoire.
# Avec la forme '-o::' ou '--longopt::', l'option prend un argument facultatif
# (dans ce cas, la valeur de l'option sur la ligne de commande doit
@ -2330,12 +2333,10 @@ function parse_opts() {
# la variable de destination est un tableau qui contient toutes les valeurs.
# Le traitement de la valeur d'une variable dépend de la forme utilisée.
# - Avec une option sans argument, le comportement est celui décrit ci-dessus.
# - Avec une option qui prend des arguments, la forme '-o: var' provoque
# l'effacement de la variable de destination, puisqu'elle doit devenir un
# tableau qui contiendra toutes les valeurs mentionnées dans les options. La
# forme '-o: var=' empêche l'effacement de la variable de destination, qui garde
# sa valeur par défaut. De plus, elle ne sera pas un tableau, et l'on ne
# supporte pas les valeurs multiples.
# - Avec une option qui prend des arguments, la forme '-o: var' considère que
# var est un tableau qui contiendra toutes les valeurs mentionnées dans les
# options. Avec la forme '-o: var=', la variable n'est pas un tableau et
# contient toujours la dernière valeur spécifiée.
# - Dans la forme 'opt $cmd', la commande cmd est executée avec eval *dès* que
# l'option est rencontrée. La variable option_ contient l'option, e.g. '-o' ou
# '--longopt'. Le cas échéant, la variable value_ contient la valeur de
@ -2425,6 +2426,19 @@ function __po_parse_optdescs() {
let shift_=$shift_+2
elif [[ "$1" == --* ]] || [[ "$1" == -* ]]; then
array_split optdescs_ "$1" ","
if [ "$2" == . ]; then
local autoname_
for optdesc_ in "${optdescs_[@]}"; do
if [ ${#optdesc_} -gt ${#autoname_} ]; then
autoname_="$optdesc_"
fi
done
while [ -n "$autoname_" -a "${autoname_#-}" != "$autoname_" ]; do autoname_="${autoname_#-}"; done
while [ -n "$autoname_" -a "${autoname_%:}" != "$autoname_" ]; do autoname_="${autoname_%:}"; done
autoname_="${autoname_//-/_}"
shift; shift
set -- dummy "$autoname_" "$@"
fi
for optdesc_ in "${optdescs_[@]}"; do
if [[ "$2" == \$* ]]; then
name_="$2"
@ -2441,23 +2455,19 @@ function __po_parse_optdescs() {
elif [[ "$optdesc_" == *:: ]]; then
option_="${optdesc_%::}"
if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée, mais la
# valeur de la variable n'est pas écrasée
# la valeur mentionnée est toujours ignorée
name_="${2%%=*}="
else
name_="$2"
array_new "$name_"
fi
flag_=::
elif [[ "$optdesc_" == *: ]]; then
option_="${optdesc_%:}"
if [[ "$2" == *=* ]]; then
# la valeur mentionnée est toujours ignorée, mais la
# valeur de la variable n'est pas écrasée
# la valeur mentionnée est toujours ignorée
name_="${2%%=*}="
else
name_="$2"
array_new "$name_"
fi
flag_=:
else