From be6e529385bec2e7d130ce6df65a927d02a44dbe Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 4 Sep 2014 21:48:18 +0400 Subject: [PATCH] =?UTF-8?q?am=C3=A9liorer=20l'ergonomie=20des=20fonctions?= =?UTF-8?q?=20setv(),=20setx()=20et=20seta()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/base | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/lib/ulib/base b/lib/ulib/base index e54d183..852a692 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -107,18 +107,51 @@ function qlines() { sed "s/'/'\\\\''/g; s/.*/'&'/g" } function setv() { -# initialiser la variable $1 avec la valeur $2..* +# initialiser la variable $1 avec la valeur "$2..*" +# note: en principe, la syntaxe est 'setv var values...'. cependant, la +# syntaxe 'setv var=values...' est supportée aussi + local __s_var="$1"; shift + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_var=\"$(qval "$*")\"" +} +function _setv() { +# Comme la fonction setv() mais ne supporte que la syntaxe '_setv var cmd args...' local __s_var="$1"; shift eval "$__s_var=\"$(qval "$*")\"" } function setx() { -# initialiser la variable $1 avec le résultat de la commande '$2..@' +# 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 - eval "$__s_var=\"\$(\"\$@\")\"" + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_var="'"$("$@")"' +} +function _setx() { +# Comme la fonction setx() mais ne supporte que la syntaxe '_setx var cmd args...' + local __s_var="$1"; shift + eval "$__s_var="'"$("$@")"' } function seta() { -# initialiser le tableau $1 avec le résultat de la commande '$2..@', chaque +# 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_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_array=($("$@" | qlines))" +} +function _seta() { +# Comme la fonction seta() mais ne supporte que la syntaxe '_seta var cmd args...' local __s_array="$1"; shift eval "$__s_array=($("$@" | qlines))" }