Bonjour,
Avant de me lancer dans tout un tas de tests, je voudrais savoir si quelqu'un a déjà été confronté au problème suivant et connait déjà une réponse simple à la question posée (sinon je chercherai par moi-même!).
J'utilise ksh, avec le mode nounset positionné.
J'ai une super-fonction "superFoo" qui reçoit un certain nombre (variable et éventuellement nul) de paramètres. Elle teste parmi ceux-ci la présence d'un indicateur "skiperror" (dont la présence va avoir certaines conséquences (par exemple, le positionnement d'une variable)), puis elle appelle une sous-fonction "subFoo" en lui passant les paramètres qu'elle a reçus. Donc, en gros, quelque chose comme:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function superFoo {
# Pour simplifier, on suppose qu'il n'y a pas d'argument pouvant "contenir" skiperror
# sans être exactement "skiperror"
if print ${1+"$@"} | fgrep -q skiperror ; then
SKIPERROR=true
else
SKIPERROR=false
fi
subFoo ${1+"$@"}
typeset -i res=$?
if [[ $SKIPERROR = true ]] ; then
: # etc.
fi
} |
Je voudrais savoir s'il existe une manière simple de supprimer "skiperror" de ${1+"$@"} dans la partie "then", afin de ne PAS le passer à "subFoo".
La difficulté est de gérer des arguments pouvant contenir des espaces, comme:
superFoo "a b" skiperror "c d"
qui devrait, in fine, appeler:
Une autre (petite) difficulté est que, lorsque "nounset" est positionnée (set -u), l'extension de paramètre $@ provoque une erreur parameter not set lorsque la fonction est appelée sans aucun argument. Mais ce cas peut être facilement traité par un test préalable sur $#.
Merci d'avance aux experts!
)jack(
Partager