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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(