migration de nouvelles fonctions de gestion des chaines de caractère
This commit is contained in:
parent
f0edff697b
commit
4d40820308
|
@ -1 +1 @@
|
||||||
003001000
|
003002000
|
||||||
|
|
107
lib/ulib/base
107
lib/ulib/base
|
@ -35,7 +35,7 @@ fi
|
||||||
##@include base.array
|
##@include base.array
|
||||||
##@include base.compat
|
##@include base.compat
|
||||||
uprovide base
|
uprovide base
|
||||||
urequire base.init base.core base.string base.array base.compat
|
urequire base.init base.core base.string base.quote base.array base.compat
|
||||||
|
|
||||||
## Informations sur l'hôte sur lequel tourne ce script
|
## Informations sur l'hôte sur lequel tourne ce script
|
||||||
# Type de système
|
# Type de système
|
||||||
|
@ -50,11 +50,6 @@ if [ -n "$UTOOLS_CHROOT" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## valeurs
|
## valeurs
|
||||||
function yesval() {
|
|
||||||
# normaliser une valeur vraie: si $1 est une valeur "oui", afficher 1, sinon
|
|
||||||
# afficher une chaine vide
|
|
||||||
is_yes "$1" && echo 1
|
|
||||||
}
|
|
||||||
function setyesval() {
|
function setyesval() {
|
||||||
# mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1
|
# mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1
|
||||||
is_yes "$2" && set_var "$1" 1 || set_var "$1" ""
|
is_yes "$2" && set_var "$1" 1 || set_var "$1" ""
|
||||||
|
@ -72,47 +67,6 @@ function normyesvals() {
|
||||||
is_yes "${!__nyv_yesvar}" && set_var "$__nyv_yesvar" 1 || set_var "$__nyv_yesvar" ""
|
is_yes "${!__nyv_yesvar}" && set_var "$__nyv_yesvar" 1 || set_var "$__nyv_yesvar" ""
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
function rawecho() {
|
|
||||||
# afficher une valeur brute. contrairement à echo, ne pas reconnaitre les
|
|
||||||
# options -e, -E, -n.
|
|
||||||
# cette fonction est nécessaire pour pouvoir splitter et afficher des options de
|
|
||||||
# ligne de commande.
|
|
||||||
local first
|
|
||||||
while [ "${1:0:1}" == "-" ]; do
|
|
||||||
echo_ -
|
|
||||||
first="${1:1}"; shift
|
|
||||||
set -- "$first" "$@"
|
|
||||||
done
|
|
||||||
echo "$*"
|
|
||||||
}
|
|
||||||
function rawecho_() {
|
|
||||||
local first
|
|
||||||
while [ "${1:0:1}" == "-" ]; do
|
|
||||||
echo_ -
|
|
||||||
first="${1:1}"; shift
|
|
||||||
set -- "$first" "$@"
|
|
||||||
done
|
|
||||||
echo_ "$*"
|
|
||||||
}
|
|
||||||
function quote_arg() {
|
|
||||||
# Dans la chaine $1, remplacer \ par \\, " par \", $ par \$, ` par \`
|
|
||||||
# Cela permet de quoter une chaine à mettre entre guillements
|
|
||||||
# note: la protection de ! n'est pas effectuée, parce que le comportement du
|
|
||||||
# shell est incohérent entre le shell interactif et les scripts. Pour une
|
|
||||||
# version plus robuste, utiliser plutôt quote_sarg(), qui est malheureusement
|
|
||||||
# plus lent, parce qu'il utilise un programme externe
|
|
||||||
local s="$1"
|
|
||||||
s="${s//\\/\\\\}"
|
|
||||||
s="${s//\"/\\\"}"
|
|
||||||
s="${s//\$/\\\$}"
|
|
||||||
s="${s//\`/\\\`}"
|
|
||||||
rawecho "$s"
|
|
||||||
}
|
|
||||||
function quoted_arg() {
|
|
||||||
# Dans la chaine $1, remplacer \ par \\, " par \" et $ par \$, et afficher la
|
|
||||||
# chaine entourée de guillemets, si nécessaire
|
|
||||||
should_quote "$1" && echo "\"$(quote_arg "$1")\"" || quote_arg "$1"
|
|
||||||
}
|
|
||||||
function quote_in() {
|
function quote_in() {
|
||||||
# Comme quote_arg pour une chaine lue sur stdin
|
# Comme quote_arg pour une chaine lue sur stdin
|
||||||
sed 's/\\/\\\\/g
|
sed 's/\\/\\\\/g
|
||||||
|
@ -135,15 +89,6 @@ function quoted_sarg() {
|
||||||
# quotes
|
# quotes
|
||||||
echo "'$(quote_sarg "$1")'"
|
echo "'$(quote_sarg "$1")'"
|
||||||
}
|
}
|
||||||
function quoted_args() {
|
|
||||||
# Comme quoted_arg, mais tous les arguments sont quotés et affichés entourés de
|
|
||||||
# guillemets, ce qui permet de construire des arguments d'une ligne de commande
|
|
||||||
local a s
|
|
||||||
for a in "$@"; do
|
|
||||||
s="${s:+$s }$(quoted_arg "$a")"
|
|
||||||
done
|
|
||||||
rawecho "$s"
|
|
||||||
}
|
|
||||||
function quoted_sargs() {
|
function quoted_sargs() {
|
||||||
# Comme quoted_sarg, mais tous les arguments sont quotés et affichés entourés de
|
# Comme quoted_sarg, mais tous les arguments sont quotés et affichés entourés de
|
||||||
# quotes, ce qui permet de construire des arguments d'une ligne de commande
|
# quotes, ce qui permet de construire des arguments d'une ligne de commande
|
||||||
|
@ -153,53 +98,6 @@ function quoted_sargs() {
|
||||||
done
|
done
|
||||||
rawecho "$s"
|
rawecho "$s"
|
||||||
}
|
}
|
||||||
function quote_awk() {
|
|
||||||
# dans la chaine $1, remplacer \ par \\ et " par \". ceci est utile pour quoter
|
|
||||||
# des valeur à insérer dans un script awk
|
|
||||||
local s="$1"
|
|
||||||
s="${s//\\/\\\\}"
|
|
||||||
s="${s//\"/\\\"}"
|
|
||||||
s="${s//
|
|
||||||
/\\n}"
|
|
||||||
rawecho "$s"
|
|
||||||
}
|
|
||||||
function quoted_awk() {
|
|
||||||
# dans la chaine $1, remplacer \ par \\ et " par \" et afficher la
|
|
||||||
# chaine entourée de guillemets. ceci est utile pour quoter
|
|
||||||
# des valeur à insérer dans un script awk
|
|
||||||
rawecho "\"$(quote_awk "$1")\""
|
|
||||||
}
|
|
||||||
function quote_seds() {
|
|
||||||
# Quoter la chaine $1, qui doit être utilisée comme chaine de recherche ou de
|
|
||||||
# remplacement de grep, sed ou awk
|
|
||||||
local s="$1"
|
|
||||||
s="${s//\\/\\\\}"
|
|
||||||
s="${s//\//\\/}"
|
|
||||||
rawecho "$s"
|
|
||||||
}
|
|
||||||
function quote_form() {
|
|
||||||
# Dans la chaine $1, remplacer '%' par '%25', '+' par '%2B', '&' par '%26', '='
|
|
||||||
# par '%3D', ' ' par '+'
|
|
||||||
local s="$1"
|
|
||||||
s="${s//\%/%25}"
|
|
||||||
s="${s//+/%2B}"
|
|
||||||
s="${s//&/%26}"
|
|
||||||
s="${s//=/%3D}"
|
|
||||||
s="${s// /+}"
|
|
||||||
rawecho "$s"
|
|
||||||
}
|
|
||||||
function quoted_form() {
|
|
||||||
# Dans la chaine $1 qui est de la forme "name=value", remplacer dans name et
|
|
||||||
# dans value '%' par '%25', '+' par '%2B', '&' par '%26', '=' par '%3D', ' ' par
|
|
||||||
# '+'
|
|
||||||
local n="${1%%=*}"
|
|
||||||
if [ "$n" != "$1" ]; then
|
|
||||||
local v="${1#*=}"
|
|
||||||
rawecho "$(quote_form "$n")=$(quote_form "$v")"
|
|
||||||
else
|
|
||||||
quote_form "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
function first_char() {
|
function first_char() {
|
||||||
# retourner le premier caractère de la chaine $1
|
# retourner le premier caractère de la chaine $1
|
||||||
rawecho "${1:0:1}"
|
rawecho "${1:0:1}"
|
||||||
|
@ -3110,9 +3008,6 @@ function utools_local() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function echo_() {
|
|
||||||
echo -n "$*"
|
|
||||||
}
|
|
||||||
function isatty() {
|
function isatty() {
|
||||||
# tester si STDOUT n'est pas une redirection
|
# tester si STDOUT n'est pas une redirection
|
||||||
tty -s <&1
|
tty -s <&1
|
||||||
|
|
|
@ -57,3 +57,17 @@ if [ -n "$BASH_VERSINFO" -a "${BASH_VERSINFO[0]}" -lt 4 ]; then
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
## base.core
|
||||||
|
function rawecho() { recho "$@"; }
|
||||||
|
function rawecho_() { recho_ "$@"; }
|
||||||
|
function quote_arg() { _qval "$@"; }
|
||||||
|
function quoted_arg() { qvalm "$@"; }
|
||||||
|
function quoted_args() { qvals "$@"; }
|
||||||
|
|
||||||
|
## base.quote
|
||||||
|
function quote_awk() { _qawk "$@"; }
|
||||||
|
function quoted_awk() { qawk "$@"; }
|
||||||
|
function quote_seds() { qseds "$@"; }
|
||||||
|
function quote_form() { _qform "$@"; }
|
||||||
|
function quoted_form() { qform "$@"; }
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
##@cooked nocomments
|
##@cooked nocomments
|
||||||
uprovide base.core
|
uprovide base.core
|
||||||
|
|
||||||
|
function echo_() {
|
||||||
|
# afficher la valeur $* sans passer à la ligne
|
||||||
|
echo -n "$*"
|
||||||
|
}
|
||||||
function recho() {
|
function recho() {
|
||||||
# afficher une valeur brute. contrairement à la commande echo, ne reconnaitre
|
# afficher une valeur brute. contrairement à la commande echo, ne reconnaitre
|
||||||
# aucune option (i.e. -e, -E, -n ne sont pas signifiants)
|
# aucune option (i.e. -e, -E, -n ne sont pas signifiants)
|
||||||
|
@ -39,20 +43,6 @@ function _qval() {
|
||||||
s="${s//\`/\\\`}"
|
s="${s//\`/\\\`}"
|
||||||
recho_ "$s"
|
recho_ "$s"
|
||||||
}
|
}
|
||||||
function qval() {
|
|
||||||
# Afficher la chaine $* quotée avec "
|
|
||||||
echo -n \"
|
|
||||||
_qval "$@"
|
|
||||||
echo \"
|
|
||||||
}
|
|
||||||
function qvalr() {
|
|
||||||
# Afficher la chaine $* quotée avec ", sauf si elle est vide
|
|
||||||
if [ -n "$*" ]; then
|
|
||||||
echo -n \"
|
|
||||||
_qval "$@"
|
|
||||||
echo n \"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
function should_quote() {
|
function should_quote() {
|
||||||
# Tester si la chaine $* doit être mise entre quotes
|
# Tester si la chaine $* doit être mise entre quotes
|
||||||
[ -z "$1" ] && return 0
|
[ -z "$1" ] && return 0
|
||||||
|
@ -66,6 +56,30 @@ function should_quote() {
|
||||||
s="${s//=/}"
|
s="${s//=/}"
|
||||||
[ -n "$s" ]
|
[ -n "$s" ]
|
||||||
}
|
}
|
||||||
|
function qval() {
|
||||||
|
# Afficher la chaine $* quotée avec "
|
||||||
|
echo -n \"
|
||||||
|
_qval "$@"
|
||||||
|
echo \"
|
||||||
|
}
|
||||||
|
function qvalm() {
|
||||||
|
# Afficher la chaine $* quotée si nécessaire avec "
|
||||||
|
if should_quote "$*"; then
|
||||||
|
echo -n \"
|
||||||
|
_qval "$@"
|
||||||
|
echo \"
|
||||||
|
else
|
||||||
|
recho "$*"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function qvalr() {
|
||||||
|
# Afficher la chaine $* quotée avec ", sauf si elle est vide
|
||||||
|
if [ -n "$*" ]; then
|
||||||
|
echo -n \"
|
||||||
|
_qval "$@"
|
||||||
|
echo \"
|
||||||
|
fi
|
||||||
|
}
|
||||||
function qvals() {
|
function qvals() {
|
||||||
# Afficher chaque argument de cette fonction quotée le cas échéant avec "
|
# Afficher chaque argument de cette fonction quotée le cas échéant avec "
|
||||||
# Chaque valeur est séparée par un espace.
|
# Chaque valeur est séparée par un espace.
|
||||||
|
@ -81,6 +95,7 @@ function qvals() {
|
||||||
fi
|
fi
|
||||||
first=
|
first=
|
||||||
done
|
done
|
||||||
|
[ -z "$first" ] && echo
|
||||||
}
|
}
|
||||||
function qlines() {
|
function qlines() {
|
||||||
# Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées
|
# Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées
|
||||||
|
@ -88,7 +103,7 @@ function qlines() {
|
||||||
sed "s/'/'\\\\''/g; s/.*/'&'/g"
|
sed "s/'/'\\\\''/g; s/.*/'&'/g"
|
||||||
}
|
}
|
||||||
function setv() {
|
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
|
# note: en principe, la syntaxe est 'setv var values...'. cependant, la
|
||||||
# syntaxe 'setv var=values...' est supportée aussi
|
# syntaxe 'setv var=values...' est supportée aussi
|
||||||
local __s_var="$1"; shift
|
local __s_var="$1"; shift
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
## Fonctions de base: protection de valeurs chaine
|
||||||
|
##@cooked nocomments
|
||||||
|
uprovide base.quote
|
||||||
|
urequire base.core
|
||||||
|
|
||||||
|
function _qawk() {
|
||||||
|
# Dans la chaine $*, remplacer \ par \\ et " par \". Ceci est utile pour quoter
|
||||||
|
# des valeur à insérer dans un script awk
|
||||||
|
local s="$*"
|
||||||
|
s="${s//\\/\\\\}"
|
||||||
|
s="${s//\"/\\\"}"
|
||||||
|
s="${s//
|
||||||
|
/\\n}"
|
||||||
|
recho_ "$s"
|
||||||
|
}
|
||||||
|
function qawk() {
|
||||||
|
# Dans la chaine $*, remplacer \ par \\ et " par \" et afficher la chaine
|
||||||
|
# entourée de guillemets. Ceci est utile pour quoter des valeur à insérer dans
|
||||||
|
# un script awk
|
||||||
|
echo -n \"
|
||||||
|
_qawk "$@"
|
||||||
|
echo \"
|
||||||
|
}
|
||||||
|
function qseds() {
|
||||||
|
# Quoter la chaine $*, qui doit être utilisée comme chaine de recherche ou de
|
||||||
|
# remplacement de grep, sed ou awk
|
||||||
|
local s="$*"
|
||||||
|
s="${s//\\/\\\\}"
|
||||||
|
s="${s//\//\\/}"
|
||||||
|
recho "$s"
|
||||||
|
}
|
||||||
|
function _qform() {
|
||||||
|
# Dans la chaine $*, remplacer '%' par '%25', '+' par '%2B', '&' par '%26', '='
|
||||||
|
# par '%3D', ' ' par '+'
|
||||||
|
local s="$*"
|
||||||
|
s="${s//\%/%25}"
|
||||||
|
s="${s//+/%2B}"
|
||||||
|
s="${s//&/%26}"
|
||||||
|
s="${s//=/%3D}"
|
||||||
|
s="${s// /+}"
|
||||||
|
recho_ "$s"
|
||||||
|
}
|
||||||
|
function qform() {
|
||||||
|
# Dans la chaine $* qui est de la forme "name=value", remplacer dans name et
|
||||||
|
# dans value '%' par '%25', '+' par '%2B', '&' par '%26', '=' par '%3D', ' ' par
|
||||||
|
# '+'
|
||||||
|
local s="$*"
|
||||||
|
if [[ "$s" == *=* ]]; then
|
||||||
|
_qform "${s%%=*}"
|
||||||
|
echo -n =
|
||||||
|
_qform "${s#*=}"
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
_qform "$s"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
}
|
|
@ -157,3 +157,8 @@ function is_no() {
|
||||||
isnum "$1" && [ "$1" -eq 0 ] && return 0
|
isnum "$1" && [ "$1" -eq 0 ] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
function yesval() {
|
||||||
|
# normaliser une valeur vraie: si $1 est une valeur "oui", afficher 1, sinon
|
||||||
|
# afficher une chaine vide
|
||||||
|
is_yes "$1" && echo 1
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue