ulib: ajouter la fonction strops
This commit is contained in:
parent
db24c7084f
commit
8d486dc4e3
|
@ -116,6 +116,60 @@ function strrepl() {
|
||||||
eval "$cmd"
|
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() {
|
function first_char() {
|
||||||
# retourner le premier caractère de la chaine $*
|
# retourner le premier caractère de la chaine $*
|
||||||
local str="$*"
|
local str="$*"
|
||||||
|
|
Loading…
Reference in New Issue