diff --git a/lib/ulib/base b/lib/ulib/base index 8bdf20f..5727127 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -139,37 +139,43 @@ function _setv() { eval "$__s_var=\"$(_qval "$*")\"" } function setx() { -# initialiser la variable $1 avec le résultat de la commande "$2..@" -# note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la -# syntaxe 'setx var=cmd args...' est supportée aussi - local __s_var="$1"; shift - if [[ "$__s_var" == *=* ]]; then - set -- "${__s_var#*=}" "$@" - __s_var="${__s_var%%=*}" +# syntaxe 1: setx var cmd +# initialiser la variable $1 avec le résultat de la commande "$2..@" +# note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la +# syntaxe 'setx var=cmd args...' est supportée aussi +# syntaxe 2: setx -a array cmd +# initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque +# ligne du résultat étant un élément du tableau +# note: en principe, la syntaxe est 'setx -a array cmd args...'. cependant, la +# syntaxe 'setx -a array=cmd args...' est supportée aussi + if [ "$1" == -a ]; then + shift + local __s_array="$1"; shift + if [[ "$__s_array" == *=* ]]; then + set -- "${__s_array#*=}" "$@" + __s_array="${__s_array%%=*}" + fi + eval "$__s_array=($("$@" | qlines))" + else + local __s_var="$1"; shift + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_var="'"$("$@")"' fi - eval "$__s_var="'"$("$@")"' } -function _setx() { -# Comme la fonction setx() mais ne supporte que la syntaxe '_setx var cmd args...' -# Cette fonction est légèrement plus rapide que setx() +function _setvx() { +# Comme la fonction setx() mais ne supporte que l'initialisation d'une variable +# scalaire avec la syntaxe '_setvx var cmd args...' pour gagner (un peu) en +# rapidité d'exécution. local __s_var="$1"; shift eval "$__s_var="'"$("$@")"' } -function seta() { -# initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque -# ligne du résultat étant un élément du tableau -# note: en principe, la syntaxe est 'seta var cmd args...'. cependant, la -# syntaxe 'seta var=cmd args...' est supportée aussi - local __s_array="$1"; shift - if [[ "$__s_array" == *=* ]]; then - set -- "${__s_array#*=}" "$@" - __s_array="${__s_array%%=*}" - fi - eval "$__s_array=($("$@" | qlines))" -} -function _seta() { -# Comme la fonction seta() mais ne supporte que la syntaxe '_seta var cmd args...' -# Cette fonction est légèrement plus rapide que seta() +function _setax() { +# Comme la fonction setx() mais ne supporte que l'initialisation d'un tableau +# avec la syntaxe '_setax array cmd args...' pour gagner (un peu) en rapidité +# d'exécution. local __s_array="$1"; shift eval "$__s_array=($("$@" | qlines))" } @@ -212,12 +218,15 @@ function evalx() { } function setx2() { # équivalent à setx $1 evalx $2..@ + local -a __s_args + if [ "$1" == -a ]; then __s_args=(-a); shift; fi local __s_var="$1"; shift if [[ "$__s_var" == *=* ]]; then set -- "${__s_var#*=}" "$@" __s_var="${__s_var%%=*}" fi - setx "$__s_var" evalx "$@" + __s_args=("${__s_args[@]}" "$__s_var") + setx "${__s_args[@]}" evalx "$@" } function evalp() { # Implémenter une syntaxe alternative permettant d'enchainer des traitements sur