fusionner seta() et setx()

This commit is contained in:
Jephté Clain 2014-09-15 09:42:24 +04:00
parent cd6b0e062a
commit 220016a1e9

View File

@ -139,37 +139,43 @@ function _setv() {
eval "$__s_var=\"$(_qval "$*")\"" eval "$__s_var=\"$(_qval "$*")\""
} }
function setx() { function setx() {
# syntaxe 1: setx var cmd
# 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 # note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la
# syntaxe 'setx var=cmd args...' est supportée aussi # syntaxe 'setx var=cmd args...' est supportée aussi
local __s_var="$1"; shift # syntaxe 2: setx -a array cmd
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...'
# Cette fonction est légèrement plus rapide que setx()
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 # ligne du résultat étant un élément du tableau
# note: en principe, la syntaxe est 'seta var cmd args...'. cependant, la # note: en principe, la syntaxe est 'setx -a array cmd args...'. cependant, la
# syntaxe 'seta var=cmd args...' est supportée aussi # syntaxe 'setx -a array=cmd args...' est supportée aussi
if [ "$1" == -a ]; then
shift
local __s_array="$1"; shift local __s_array="$1"; shift
if [[ "$__s_array" == *=* ]]; then if [[ "$__s_array" == *=* ]]; then
set -- "${__s_array#*=}" "$@" set -- "${__s_array#*=}" "$@"
__s_array="${__s_array%%=*}" __s_array="${__s_array%%=*}"
fi fi
eval "$__s_array=($("$@" | qlines))" 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
} }
function _seta() { function _setvx() {
# Comme la fonction seta() mais ne supporte que la syntaxe '_seta var cmd args...' # Comme la fonction setx() mais ne supporte que l'initialisation d'une variable
# Cette fonction est légèrement plus rapide que seta() # 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 _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 local __s_array="$1"; shift
eval "$__s_array=($("$@" | qlines))" eval "$__s_array=($("$@" | qlines))"
} }
@ -212,12 +218,15 @@ function evalx() {
} }
function setx2() { function setx2() {
# équivalent à setx $1 evalx $2..@ # équivalent à setx $1 evalx $2..@
local -a __s_args
if [ "$1" == -a ]; then __s_args=(-a); shift; fi
local __s_var="$1"; shift local __s_var="$1"; shift
if [[ "$__s_var" == *=* ]]; then if [[ "$__s_var" == *=* ]]; then
set -- "${__s_var#*=}" "$@" set -- "${__s_var#*=}" "$@"
__s_var="${__s_var%%=*}" __s_var="${__s_var%%=*}"
fi fi
setx "$__s_var" evalx "$@" __s_args=("${__s_args[@]}" "$__s_var")
setx "${__s_args[@]}" evalx "$@"
} }
function evalp() { function evalp() {
# Implémenter une syntaxe alternative permettant d'enchainer des traitements sur # Implémenter une syntaxe alternative permettant d'enchainer des traitements sur