supprimer _rval(), remplacer par qwc()
This commit is contained in:
parent
a3e647ee6a
commit
3ff7f78d0b
|
@ -1 +1 @@
|
|||
007013002
|
||||
007014000
|
||||
|
|
|
@ -1304,7 +1304,7 @@ function __la_cmd() {
|
|||
local arg
|
||||
local cmd="/bin/ls -1d"
|
||||
for arg in "$@"; do
|
||||
arg="$(_rval "$arg")"
|
||||
arg="$(qwc "$arg")"
|
||||
cmd="$cmd $arg"
|
||||
done
|
||||
cmd="$cmd 2>/dev/null"
|
||||
|
|
|
@ -29,31 +29,6 @@ function recho_() {
|
|||
echo -n "$@"
|
||||
fi
|
||||
}
|
||||
function _rval() {
|
||||
# Dans la chaine $*, remplacer \ par \\, " par \", ' par \', ( par \(, ) par \),
|
||||
# { par \{, } par \}, [ 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//\)/\)}"
|
||||
s="${s//\{/\{}"
|
||||
s="${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.
|
||||
|
@ -129,6 +104,61 @@ function qvals() {
|
|||
done
|
||||
[ -z "$first" ] && echo
|
||||
}
|
||||
function qwc() {
|
||||
# Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \`, puis
|
||||
# quoter la chaine avec ", sauf les wildcards * et ?
|
||||
# Cela permet de quoter une chaine permettant de glober des fichiers, e.g
|
||||
# eval "ls $(qwc "$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//\`/\\\`}"
|
||||
local r a b
|
||||
while [ -n "$s" ]; do
|
||||
if [[ "$s" == *\** ]]; then
|
||||
if [[ "$s" == *\?* ]]; then
|
||||
a="${s%%\**}"
|
||||
b="${s%%\?*}"
|
||||
if [ ${#a} -lt ${#b} ]; then
|
||||
s="${s#*\*}"
|
||||
r="$r\"$a\"*"
|
||||
else
|
||||
s="${s#*\?}"
|
||||
r="$r\"$b\"?"
|
||||
fi
|
||||
else
|
||||
a="${s%%\**}"
|
||||
s="${s#*\*}"
|
||||
r="$r\"$a\"*"
|
||||
fi
|
||||
elif [[ "$s" == *\?* ]]; then
|
||||
if [[ "$s" == *\** ]]; then
|
||||
a="${s%%\**}"
|
||||
b="${s%%\?*}"
|
||||
if [ ${#a} -lt ${#b} ]; then
|
||||
s="${s#*\*}"
|
||||
r="$r\"$a\"*"
|
||||
else
|
||||
s="${s#*\?}"
|
||||
r="$r\"$b\"?"
|
||||
fi
|
||||
else
|
||||
a="${s%%\?*}"
|
||||
s="${s#*\?}"
|
||||
r="$r\"$a\"?"
|
||||
fi
|
||||
else
|
||||
r="$r\"$s\""
|
||||
break
|
||||
fi
|
||||
done
|
||||
recho_ "$r"
|
||||
}
|
||||
function qlines() {
|
||||
# Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées
|
||||
# avec '
|
||||
|
|
Loading…
Reference in New Issue