Comment spécifier -? option avec GNU getopt

Lors de l'parsing des arguments de la command line avec la command GNU getopt , comment getopt -je (si possible) -? comme une autre option? Y at-il un moyen de l'échapper dans l'opssortingng?

La command GNU getopt utilise la fonction GNU getopt () pour parsingr les arguments et les options.

La page man getopt (3) déclare:

Si getopt () ne reconnaît pas un caractère d'option, il affiche un message d'erreur dans stderr, stocke le caractère dans optopt , et renvoie ? . Le programme appelant peut empêcher le message d'erreur en définissant opterr sur 0.

Par conséquent ? est utilisé pour signaler "option inconnue" et ne peut pas être utilisé comme une valeur d'option. (Il serait impossible de dire l'option -? partir d'une option inconnue.)

Même si vous pouviez reconnaître cela comme une string d'option, ce serait une très mauvaise idée d'utiliser le caractère de point d'interrogation comme un argument réel car la plupart des shells utilisent cette syntaxe dans le cadre de leur syntaxe globale. pas dans le match). Passer un litteral ? serait difficile pour les users car ils devraient y échapper.

Si vous créez une option d'aide, la syntaxe habituelle consiste à searchr les options courtes et longues de -h et --help .

Pour get l'aide du point d'interrogation, essayez simplement de vérifier si l'option inconnue est indead le caractère point d'interrogation.

Par exemple, je veux imprimer un message "Option inconnue" chaque fois que l'option inconnue n'est PAS le point d'interrogation. Ensuite, j'appelle toujours ma fonction d' utilisation .

 \?) if [ "$OPTARG" != "?" ] ; then echo "Unknown option \"$OPTARG\"" ; fi usage 

En général, je suis d'accord et utiliser l'option h pour l'aide et l'option u pour l' usage , mais je l'avais déjà utilisé pour l' host et l' user et je l'ai aimé de cette façon.

PS. J'utilise bash sur Solaris 10.