From 8d486dc4e3eb4d5e91292f7a17a504a767ec98ea Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 21 Oct 2016 15:19:53 +0400 Subject: [PATCH] ulib: ajouter la fonction strops --- lib/ulib/base.string | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/lib/ulib/base.string b/lib/ulib/base.string index 288a867..4abcc07 100644 --- a/lib/ulib/base.string +++ b/lib/ulib/base.string @@ -116,6 +116,60 @@ function strrepl() { eval "$cmd" } +function strops() { +# Appliquer à une chaine de caractères une suite de traitements, e.g: +# 'strops var deref +suffix' est équivalent à 'echo "${var}suffix"' +# En commençant avec la valeur initiale $1, les arguments $2..* sont des +# opérations à appliquer dans l'ordre. +# Les opérations suivantes considèrent que la valeur courante est un nom de +# variable: +# :- := :? :+ deref dcount +# Toutes les autres opérations travaillent directement avec la valeur +# courante. Les opérations suivantes appliquent une transformation: +# # % / : ^ , +# -# +% -% + - +# Les opérations suivantes font un test sur la valeur et retournent +# immédiatement: +# = == != < > -eq -ne -lt -le -gt -ge -n -z +# La syntaxe des opérateurs standards de bash est reprise autant que possible, +# i.e si on a l'habitude d'écrire ${varOP} en bash, alors la syntaxe à utiliser +# à priori est 'strops var OP' ou 'strop var deref OP' suivant les opérateurs. +# Autres opérateurs: +# deref indirection +# dcount nombre d'éléments du tableau +# +#STR ajouter un préfixe +# -#STR supprimer un préfixe +# +%STR ou +STR ajouter un suffixe +# -%STR ou -STR supprimer un suffixe + local -a __s_tmp + local __s_value="$1"; shift + while [ $# -gt 0 ]; do + case "$1" in + # l'argument est le nom de la variable + :-*|:=*|:\?*|:+*) eval '__s_value="${'"${__s_value}$1"'}"';; + d|deref) __s_value="${!__s_value}";; + dc|dcount|ds|dsize) + __s_value="${__s_value}[@]" + __s_tmp=("${!__s_value}") + __s_value="${#__s_tmp[@]}" + ;; + # l'argument est la valeur de la variable + \#*|%*|/*|:*|^*|,*) eval '__s_value="${__s_value'"$1"'}"';; + l|length) __s_value="${#__s_value}";; + =|==|!=|\<|\>|-eq|-ne|-lt|-le|-gt|-ge) + __s_tmp=(\[ "$__s_value" "$@" ]); "${__s_tmp[@]}"; return $?;; + -n|-z) __s_tmp=(\[ "$1" "$__s_value" ]); "${__s_tmp[@]}"; return $?;; + +#*) eval '__s_value="'"${1#+#}"'$__s_value"';; + -#*) eval '__s_value="${__s_value'"${1#-}"'}"';; + +%*) eval '__s_value="$__s_value"'"${1#+%}";; + +*) eval '__s_value="$__s_value"'"${1#+}";; + -%*) eval '__s_value="${__s_value'"${1#-}"'}"';; + -*) eval '__s_value="${__s_value%'"${1#-}"'}"';; + esac + shift + done + echo "$__s_value" +} + function first_char() { # retourner le premier caractère de la chaine $* local str="$*"