##@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 $* 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 $* 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 first_char() { # retourner le premier caractère de la chaine $* local str="$*" echo "${str:0:1}" } function last_char() { # retourner le dernier caractère de la chaine $* local str="$*" echo "${str: -1:1}" } function first_chars() { # retourner tous les caractères de la chaine $*, excepté le dernier local str="$*" recho "${str:0:$((${#1}-1))}" } function last_chars() { # retourner tous les caractères de la chaine $*, excepté le premier local str="$*" recho "${str:1}" } function first_char_is() { # Tester si le premier caractère de la chaine $1 est $2 [ "${1:0:1}" == "$2" ] } function last_char_is() { # Tester si le dernier caractère de la chaine $1 est $2 [ "${1:$((-1)):1}" == "$2" ] } function beginswith() { # Tester si la chaine $1 commence par le wildcard $2 local str="$1" pattern="$2" eval '[ "${str#$pattern}" != "$str" ]' } function endswith() { # Tester si la chaine $1 se termine par le wildcard $2 local str="$1" pattern="$2" eval '[ "${str%$pattern}" != "$str" ]' }