implémenter _rval(), pour corriger un bug avec le listage de fichiers avec des espaces

This commit is contained in:
Jephte CLAIN 2014-12-23 10:39:18 +04:00
parent 418753bf89
commit b64cb98dad
3 changed files with 20 additions and 2 deletions

View File

@ -1 +1 @@
007011000
007012000

View File

@ -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"

View File

@ -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.