diff --git a/lib/ulib/.ulibver b/lib/ulib/.ulibver index 3225c55..784ef02 100644 --- a/lib/ulib/.ulibver +++ b/lib/ulib/.ulibver @@ -1 +1 @@ -007011000 +007012000 diff --git a/lib/ulib/base b/lib/ulib/base index 4eb887b..2298d52 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -1304,7 +1304,8 @@ function __la_cmd() { local arg local cmd="/bin/ls -1d" for arg in "$@"; do - cmd="$cmd $(quote_arg "$arg")" + arg="$(_rval "$arg")" + cmd="$cmd $arg" done cmd="$cmd 2>/dev/null" echo "$cmd" diff --git a/lib/ulib/base.core b/lib/ulib/base.core index 1a6bb0f..593e38f 100644 --- a/lib/ulib/base.core +++ b/lib/ulib/base.core @@ -29,6 +29,23 @@ function recho_() { echo -n "$@" fi } +function _rval() { +# Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \`, SPACE par +# \SPACE +# Cela permet de quoter une chaine à afficher telle quelle, sans guillemets, e.g +# eval "echo $(_rval "$value")" +# 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//\`/\\\`}" + s="${s// /\\ }" + recho_ "$s" +} function _qval() { # Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \` # Cela permet de quoter une chaine à mettre entre guillements.