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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jephte CLAIN
						Jephte CLAIN