Je ne suis pas un gars Linux mais coincé dans un script que je dois lire pour mon projet. Alors, quelqu'un peut-il m'aider sur ce que fait cette commande?
shift $(($optind - 1))
Je ne suis pas un gars Linux mais coincé dans un script que je dois lire pour mon projet. Alors, quelqu'un peut-il m'aider sur ce que fait cette commande?
shift $(($optind - 1))
Réponses:
shift $((OPTIND-1))(la note OPTINDest en majuscule) se trouve normalement immédiatement après une getopts whileboucle. $OPTINDest le nombre d'options trouvées par getopts.
Comme le mentionne pauljohn32 dans les commentaires, à proprement parler, OPTINDdonne la position du prochain argument de ligne de commande.
Dans le manuel de référence GNU Bash :
getopts optstring name [arguments]
getoptsest utilisé par les scripts shell pour analyser les paramètres positionnels.optstringcontient les caractères d'option à reconnaître; si un caractère est suivi de deux points, l'option devrait avoir un argument, qui devrait être séparé de celui-ci par des espaces. Les deux points (':') et le point d'interrogation ('?') Ne peuvent pas être utilisés comme caractères d'option. Chaque fois qu'elle est invoquée,getoptsplace l'option suivante dans le nom de la variable shell, initialisantnamesi elle n'existe pas, et l'index de l'argument suivant à traiter dans la variableOPTIND.OPTINDest initialisé à 1 chaque fois que le shell ou un script shell est appelé. Lorsqu'une option nécessite un argument, getopts place cet argument dans la variableOPTARG. Le shell ne se réinitialise pasOPTINDautomatiquement; il doit être réinitialisé manuellement entre plusieurs appelsgetoptsdans le même appel de shell si un nouvel ensemble de paramètres doit être utilisé.Lorsque la fin des options est rencontrée,
getoptsquitte avec une valeur de retour supérieure à zéro.OPTINDest défini sur l'index du premier argument sans option et le nom est défini sur "?".
getoptsanalyse normalement les paramètres de position, mais si plus d'arguments sont fournisargs, lesgetoptsanalyse à la place.
shift n
supprime n chaînes de la liste des paramètres de position. shift $((OPTIND-1))Supprime ainsi toutes les options qui ont été analysées par getoptsde la liste des paramètres, et donc après ce point, $1se référera au premier argument de non-option passé au script.
Mise à jour
Comme le mentionne mikeserv dans le commentaire, cela shift $((OPTIND-1))peut être dangereux. Pour éviter le fractionnement de mots indésirables, etc., toutes les extensions de paramètres doivent être entre guillemets doubles. Donc, la forme sûre de la commande est
shift "$((OPTIND-1))"
find) peuvent sembler autoriser les options après les non-options, mais ils ne le font pas: ils ont des opérandes qui commencent par un tiret.
IFS, mais il vaut mieux prévenir que guérir. ;)
IFS=0123456789, shift $((OPTIND-1))(sans guillemets) se transformera en shift ""lequel sera silencieusement ignoré (in ksh) ou générera une erreur (in bashand dash).
$((...))calcule juste des trucs. Dans votre cas, il prend la valeur de $optintet soustrait 1.
shiftsupprime les paramètres de position. Dans votre cas, il supprime les optint-1paramètres.
Pour plus d' informations consulter help getopts, help shift, regardez man bashpour « Arithmétique », et en particulier Google pour getopts.