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() {
# initialiser la variable $1 avec le résultat de la commande "$2..@" # syntaxe 1: setx var cmd
# note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la # initialiser la variable $1 avec le résultat de la commande "$2..@"
# syntaxe 'setx var=cmd args...' est supportée aussi # note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la
local __s_var="$1"; shift # syntaxe 'setx var=cmd args...' est supportée aussi
if [[ "$__s_var" == *=* ]]; then # syntaxe 2: setx -a array cmd
set -- "${__s_var#*=}" "$@" # initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque
__s_var="${__s_var%%=*}" # 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 fi
eval "$__s_var="'"$("$@")"'
} }
function _setx() { function _setvx() {
# Comme la fonction setx() mais ne supporte que la syntaxe '_setx 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 setx() # scalaire avec la syntaxe '_setvx var cmd args...' pour gagner (un peu) en
# rapidité d'exécution.
local __s_var="$1"; shift local __s_var="$1"; shift
eval "$__s_var="'"$("$@")"' eval "$__s_var="'"$("$@")"'
} }
function seta() { function _setax() {
# initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque # Comme la fonction setx() mais ne supporte que l'initialisation d'un tableau
# ligne du résultat étant un élément du tableau # avec la syntaxe '_setax array cmd args...' pour gagner (un peu) en rapidité
# note: en principe, la syntaxe est 'seta var cmd args...'. cependant, la # d'exécution.
# 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()
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