nouvelles fonctions str*

This commit is contained in:
Jephté Clain 2014-09-19 12:43:20 +04:00
parent 9ffb5af972
commit f0edff697b
4 changed files with 133 additions and 6 deletions

View File

@ -1 +1 @@
003000002
003001000

View File

@ -206,7 +206,7 @@ function first_char() {
}
function last_char() {
# retourner le dernier caractère de la chaine $1
rawecho "${1:$((-1)):1}"
rawecho "${1: -1:1}"
}
function first_chars() {
# retourner tous les caractères de la chaine $1, excepté le dernier

View File

@ -7,7 +7,31 @@ urequire base.string
if [ -n "$BASH_VERSINFO" -a "${BASH_VERSINFO[0]}" -lt 4 ]; then
if uprovided base.string; then
function strlower() { tr A-Z a-z <<<"$*"; }
function strlower1() {
local str="$*"
local h="${str:0:1}" r="${str:1}"
echo "$(tr A-Z a-z <<<"$h")$r"
}
function strlowers() {
local -a vs; local v
for v in "$@"; do
vs=("${vs[@]}" "$(strlower1 "$v")")
done
echo "${vs[*]}"
}
function strupper() { tr a-z A-Z <<<"$*"; }
function strupper1() {
local str="$*"
local h="${str:0:1}" r="${str:1}"
echo "$(tr a-z A-Z <<<"$h")$r"
}
function struppers() {
local -a vs; local v
for v in "$@"; do
vs=("${vs[@]}" "$(strupper1 "$v")")
done
echo "${vs[*]}"
}
function is_yes() {
case "$1" in
o|oui|y|yes|v|vrai|t|true|on) return 0;;

View File

@ -1,16 +1,119 @@
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
## Fonctions de base: gestion des valeurs scalaires
##@cooked nocomments
# Note: contient du code spécifique à bash 4. Le module base.compat réimplémente
# les fonctions concernées pour les rendre compatible avec bash >= 2.x
uprovide base.string
urequire base.core
function straddp() {
# ajouter le préfixe $1 à $2*
local p="$1"; shift
echo "$p$*"
}
function strdelp() {
# enlever le préfixe $1 à $2*
local p="$1"; shift
local str="$*"
echo "${str#$p}"
}
function strdelp2() {
# enlever le préfixe $1 le plus long à $2*
local p="$1"; shift
local str="$*"
echo "${str##$p}"
}
function stradds() {
# ajouter le suffixe $1 à $2*
local s="$1"; shift
echo "$*$s"
}
function strdels() {
# enlever le suffixe $1 à $2*
local s="$1"; shift
local str="$*"
echo "${str%$s}"
}
function strdels2() {
# enlever le suffixe le plus long $1 à $2*
local s="$1"; shift
local str="$*"
echo "${str%%$s}"
}
function strlower() {
# afficher en minuscule la valeur $1..*
echo ${*,,}
# afficher en minuscule la valeur $*
local str="$*"
echo "${str,,}"
}
function strlower1() {
# afficher la valeur $* après avoir converti la première lettre en minuscule
local str="$*"
echo "${str,}"
}
function strlowers() {
# afficher les valeurs $1..* après avoir converti leur première lettre en
# minuscule
local str="$*"
echo "${*,}"
}
function strupper() {
# afficher en majuscule la valeur $1..*
echo ${*^^}
# afficher en majuscule la valeur $*
local str="$*"
echo "${str^^}"
}
function strupper1() {
# afficher la valeur $* après avoir converti la première lettre en majuscule
local str="$*"
echo "${str^}"
}
function struppers() {
# afficher les valeurs $1..* après avoir converti leur première lettre en
# majuscule
echo "${*^}"
}
function strmid() {
# Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes
# 'start', '[start]:length'. Si start est négatif, le compte est effectué à
# partir de la fin de la chaine. Si length est négatif, il est rajouté à la
# longueur de la chaine à partir de start
local range="$1"; shift
local str="$*"
if [[ "$range" == *:-* ]]; then
local max=${#str}
[ $max -eq 0 ] && return
local start="${range%%:*}"
[ -n "$start" ] || start=0
while [ "$start" -lt 0 ]; do
start=$(($max$start))
done
max=$(($max-$start))
local length="${range#*:}"
while [ "$length" -lt 0 ]; do
length=$(($max$length))
done
range="$start:$length"
fi
eval 'echo "${str:'" $range"'}"'
}
function strrepl() {
# Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer
# par l'un des caractères /, #, % pour indiquer le type de recherche
local pattern="$1"; shift
local repl="$1"; shift
local str="$*"
local cmd='echo "${str/'
if [ "${pattern#/}" != "$pattern" ]; then
pattern="${pattern#/}"
cmd="$cmd/"
elif [ "${pattern#\#}" != "$pattern" ]; then
pattern="${pattern#\#}"
cmd="$cmd#"
elif [ "${pattern#%}" != "$pattern" ]; then
pattern="${pattern#%}"
cmd="$cmd%"
fi
cmd="$cmd"'$pattern/$repl}"'
eval "$cmd"
}
function isnum() {
# retourner vrai si $1 est une valeur numérique entière (positive ou négative)