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))
bash
shell
shell-script
Pantalon Gaurav
la source
la source
Réponses:
shift $((OPTIND-1))
(la noteOPTIND
est en majuscule) se trouve normalement immédiatement après unegetopts
while
boucle.$OPTIND
est le nombre d'options trouvées pargetopts
.Comme le mentionne pauljohn32 dans les commentaires, à proprement parler,
OPTIND
donne la position du prochain argument de ligne de commande.Dans le manuel de référence GNU Bash :
shift
nsupprime n chaînes de la liste des paramètres de position.
shift $((OPTIND-1))
Supprime ainsi toutes les options qui ont été analysées pargetopts
de la liste des paramètres, et donc après ce point,$1
se 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 estshift "$((OPTIND-1))"
la source
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 enshift ""
lequel sera silencieusement ignoré (inksh
) ou générera une erreur (inbash
anddash
).$((...))
calcule juste des trucs. Dans votre cas, il prend la valeur de$optint
et soustrait 1.shift
supprime les paramètres de position. Dans votre cas, il supprime lesoptint-1
paramètres.Pour plus d' informations consulter
help getopts
,help shift
, regardezman bash
pour « Arithmétique », et en particulier Google pourgetopts
.la source