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))
shift $((OPTIND-1))
(note OPTIND
est en majuscule) se trouve normalement immédiatement après une boucle getopts
while
. $OPTIND
Est le nombre d'options trouvées par getopts
.
Comme pauljohn32 le mentionne dans les commentaires à proprement parler, OPTIND
donne la position de l'argument de ligne de commande next.
Depuis le GNU Manuel de référence Bash :
getopts optstring nom [arguments]
getopts
est utilisé par les scripts Shell pour analyser les paramètres positionnels.optstring
contient 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,getopts
place l'option suivante dans le nom de la variable Shell, initialisantname
si elle n'existe pas, et l'index de l'argument suivant à traiter dans la variableOPTIND
.OPTIND
est initialisé à 1 à chaque appel du shell ou d'un script shell. Lorsqu'une option nécessite un argument, getopts place cet argument dans la variableOPTARG
. Le shell ne réinitialise pasOPTIND
automatiquement; il doit être réinitialisé manuellement entre plusieurs appels àgetopts
dans le même appel Shell si un nouvel ensemble de paramètres doit être utilisé.Lorsque la fin des options est rencontrée,
getopts
se ferme avec une valeur de retour supérieure à zéro.OPTIND
est défini sur l'index du premier argument sans option, et le nom est défini sur "?".
getopts
analyse normalement les paramètres de position, mais si plus d'arguments sont donnés dansargs
,getopts
les analyse à la place.
shift
n
supprime n chaînes de la liste des paramètres de position. Ainsi, shift $((OPTIND-1))
supprime toutes les options qui ont été analysées par getopts
de la liste des paramètres, et donc après ce point, $1
Fera référence au premier argument de non-option passé au script.
Mise à jour
Comme le mentionne mikeserv dans le commentaire, shift $((OPTIND-1))
peut être dangereux. Pour éviter le fractionnement de mots indésirable, etc., toutes les extensions de paramètres doivent être entre guillemets. Donc, la forme sûre de la commande est
shift "$((OPTIND-1))"
$((...))
calcule simplement les choses. Dans votre cas, il prend la valeur de $optint
et résumés 1.
shift
supprime les paramètres de position. Dans votre cas, il supprime optint-1
paramètres.
Pour plus d'informations, consultez help getopts
, help shift
, Regarder man bash
pour "Arithmetic Expansion", et surtout google pour getopts
.