réimplémenter certaines fonctions de façon plus efficace
This commit is contained in:
parent
c3b66b5c5c
commit
c9f6b23a71
131
ulib/base
131
ulib/base
|
@ -31,8 +31,101 @@ export TMPDIR="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}"
|
|||
[ -f ~/.nutoolsrc ] && . ~/.nutoolsrc
|
||||
|
||||
################################################################################
|
||||
## valeurs
|
||||
## core
|
||||
function recho() {
|
||||
# afficher une valeur brute. contrairement à la commande echo, ne reconnaitre
|
||||
# aucune option (i.e. -e, -E, -n)
|
||||
if [[ "${1:0:2}" == -[eEn] ]]; then
|
||||
echo -n -
|
||||
local first="${1:1}"; shift
|
||||
echo "$first" "$@"
|
||||
else
|
||||
echo "$*"
|
||||
fi
|
||||
}
|
||||
function recho_() {
|
||||
# afficher une valeur brute, sans passer à la ligne. contrairement à la commande
|
||||
# echo, ne reconnaitre aucune option (i.e. -e, -E, -n)
|
||||
if [[ "${1:0:2}" == -[eEn] ]]; then
|
||||
echo -n -
|
||||
local first="${1:1}"; shift
|
||||
echo -n "$first" "$@"
|
||||
else
|
||||
echo -n "$*"
|
||||
fi
|
||||
}
|
||||
function qval() {
|
||||
# Dans la chaine $*, 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, il est nécessaire d'utiliser un programme externe tel que sed ou awk
|
||||
local s="$*"
|
||||
s="${s//\\/\\\\}"
|
||||
s="${s//\"/\\\"}"
|
||||
s="${s//\$/\\\$}"
|
||||
s="${s//\`/\\\`}"
|
||||
recho_ "$s"
|
||||
}
|
||||
function should_quote() {
|
||||
# Tester si la chaine $* doit être mise entre quotes
|
||||
[ -z "$1" ] && return 0
|
||||
local s="${*//[a-zA-Z0-9]/}"
|
||||
s="${s//,/}"
|
||||
s="${s//./}"
|
||||
s="${s//+/}"
|
||||
s="${s//\//}"
|
||||
s="${s//-/}"
|
||||
s="${s//_/}"
|
||||
s="${s//=/}"
|
||||
[ -n "$s" ]
|
||||
}
|
||||
function qvals() {
|
||||
# Pour chaque argument de cette fonction, l'afficher éventuellement quotée avec qv()
|
||||
local arg first=1
|
||||
for arg in "$@"; do
|
||||
[ -z "$first" ] && echo -n " "
|
||||
if should_quote "$arg"; then
|
||||
echo -n \"
|
||||
qv "$arg"
|
||||
echo -n \"
|
||||
else
|
||||
recho_ "$arg"
|
||||
fi
|
||||
first=
|
||||
done
|
||||
}
|
||||
function qlines() {
|
||||
# Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées
|
||||
# avec '
|
||||
sed "s/'/'\\\\''/g; s/.*/'&'/g"
|
||||
}
|
||||
function setv() {
|
||||
# initialiser la variable $1 avec la valeur $2..*
|
||||
local __s_var="$1"; shift
|
||||
eval "$__s_var=\"$(qval "$*")\""
|
||||
}
|
||||
function setx() {
|
||||
# initialiser la variable $1 avec le résultat de la commande '$2..@'
|
||||
local __s_var="$1"; shift
|
||||
eval "$__s_var=\"\$(\"\$@\")\""
|
||||
}
|
||||
function seta() {
|
||||
# initialiser le tableau $1 avec le résultat de la commande '$2..@', chaque
|
||||
# ligne du résultat étant un élément du tableau
|
||||
local __s_array="$1"; shift
|
||||
eval "$__s_array=($("$@" | qlines))"
|
||||
}
|
||||
function e2of() {
|
||||
# lancer la commande $@ en redirigeant la sortie d'erreur sur la sortie standard
|
||||
"$@" 2>&1
|
||||
}
|
||||
function nef() {
|
||||
# lancer la commande $@ et filtrer du résultat toutes les lignes vides
|
||||
"$@" | sed '/^$/d'
|
||||
}
|
||||
|
||||
## valeurs
|
||||
function isnum() {
|
||||
# retourner vrai si $1 est une valeur numérique entière (positive ou négative)
|
||||
[ ${#1} -gt 0 ] || return 1
|
||||
|
@ -61,14 +154,10 @@ function isrnum() {
|
|||
}
|
||||
function is_yes() {
|
||||
# retourner vrai si $1 est une valeur "oui"
|
||||
[ "$1" == "o" -o "$1" == "O" -o "$1" == "oui" -o "$1" == "OUI" ] && return 0
|
||||
[ "$1" == "y" -o "$1" == "Y" -o "$1" == "yes" -o "$1" == "YES" ] && return 0
|
||||
[ "$1" == "v" -o "$1" == "V" -o "$1" == "vrai" -o "$1" == "VRAI" ] && return 0
|
||||
[ "$1" == "t" -o "$1" == "T" -o "$1" == "true" -o "$1" == "TRUE" ] && return 0
|
||||
[ "$1" == "on" -o "$1" == "ON" ] && return 0
|
||||
if isnum "$1"; then
|
||||
[ "$1" -ne 0 ] && return 0
|
||||
fi
|
||||
case "${1,,}" in
|
||||
o|oui|y|yes|v|vrai|t|true|on) return 0;;
|
||||
esac
|
||||
isnum "$1" && [ "$1" -ne 0 ] && return 0
|
||||
return 1
|
||||
}
|
||||
function yesval() {
|
||||
|
@ -95,14 +184,10 @@ function normyesvals() {
|
|||
}
|
||||
function is_no() {
|
||||
# retourner vrai si $1 est une valeur "non"
|
||||
[ "$1" == "n" -o "$1" == "N" -o "$1" == "non" -o "$1" == "NON" ] && return 0
|
||||
[ "$1" == "no" -o "$1" == "NO" ] && return 0
|
||||
[ "$1" == "f" -o "$1" == "F" -o "$1" == "faux" -o "$1" == "FAUX" ] && return 0
|
||||
[ "$1" == "false" -o "$1" == "FALSE" ] && return 0
|
||||
[ "$1" == "off" -o "$1" == "OFF" ] && return 0
|
||||
if isnum "$1"; then
|
||||
[ "$1" -eq 0 ] && return 0
|
||||
fi
|
||||
case "${1,,}" in
|
||||
n|non|no|f|faux|false|off) return 0;;
|
||||
esac
|
||||
isnum "$1" && [ "$1" -eq 0 ] && return 0
|
||||
return 1
|
||||
}
|
||||
function rawecho() {
|
||||
|
@ -141,18 +226,6 @@ function quote_arg() {
|
|||
s="${s//\`/\\\`}"
|
||||
rawecho "$s"
|
||||
}
|
||||
function should_quote() {
|
||||
[ -z "$1" ] && return 0
|
||||
local s="${1//[a-zA-Z0-9]/}"
|
||||
s="${s//,/}"
|
||||
s="${s//./}"
|
||||
s="${s//+/}"
|
||||
s="${s//\//}"
|
||||
s="${s//-/}"
|
||||
s="${s//_/}"
|
||||
s="${s//=/}"
|
||||
[ -n "$s" ]
|
||||
}
|
||||
function quoted_arg() {
|
||||
# Dans la chaine $1, remplacer \ par \\, " par \" et $ par \$, et afficher la
|
||||
# chaine entourée de guillemets, si nécessaire
|
||||
|
|
Loading…
Reference in New Issue