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.compat
|
||||
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
|
||||
# Type de système
|
||||
|
@ -50,11 +50,6 @@ if [ -n "$UTOOLS_CHROOT" ]; then
|
|||
fi
|
||||
|
||||
## 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() {
|
||||
# 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" ""
|
||||
|
@ -72,47 +67,6 @@ function normyesvals() {
|
|||
is_yes "${!__nyv_yesvar}" && set_var "$__nyv_yesvar" 1 || set_var "$__nyv_yesvar" ""
|
||||
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() {
|
||||
# Comme quote_arg pour une chaine lue sur stdin
|
||||
sed 's/\\/\\\\/g
|
||||
|
@ -135,15 +89,6 @@ function quoted_sarg() {
|
|||
# quotes
|
||||
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() {
|
||||
# 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
|
||||
|
@ -153,53 +98,6 @@ function quoted_sargs() {
|
|||
done
|
||||
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() {
|
||||
# retourner le premier caractère de la chaine $1
|
||||
rawecho "${1:0:1}"
|
||||
|
@ -3110,9 +3008,6 @@ function utools_local() {
|
|||
done
|
||||
}
|
||||
|
||||
function echo_() {
|
||||
echo -n "$*"
|
||||
}
|
||||
function isatty() {
|
||||
# tester si STDOUT n'est pas une redirection
|
||||
tty -s <&1
|
||||
|
|
|
@ -57,3 +57,17 @@ if [ -n "$BASH_VERSINFO" -a "${BASH_VERSINFO[0]}" -lt 4 ]; then
|
|||
}
|
||||
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
|
||||
uprovide base.core
|
||||
|
||||
function echo_() {
|
||||
# afficher la valeur $* sans passer à la ligne
|
||||
echo -n "$*"
|
||||
}
|
||||
function recho() {
|
||||
# afficher une valeur brute. contrairement à la commande echo, ne reconnaitre
|
||||
# aucune option (i.e. -e, -E, -n ne sont pas signifiants)
|
||||
|
@ -39,20 +43,6 @@ function _qval() {
|
|||
s="${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() {
|
||||
# Tester si la chaine $* doit être mise entre quotes
|
||||
[ -z "$1" ] && return 0
|
||||
|
@ -66,6 +56,30 @@ function should_quote() {
|
|||
s="${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() {
|
||||
# Afficher chaque argument de cette fonction quotée le cas échéant avec "
|
||||
# Chaque valeur est séparée par un espace.
|
||||
|
@ -81,6 +95,7 @@ function qvals() {
|
|||
fi
|
||||
first=
|
||||
done
|
||||
[ -z "$first" ] && echo
|
||||
}
|
||||
function qlines() {
|
||||
# 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"
|
||||
}
|
||||
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
|
||||
# syntaxe 'setv var=values...' est supportée aussi
|
||||
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
|
||||
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