Я не парень по Linux, но застрял в каком-то скрипте, который я должен прочитать для своего проекта. Так кто-нибудь может мне помочь, что делает эта команда?
shift $(($optind - 1))
bash
shell
shell-script
Гаурав Пант
источник
источник
Ответы:
shift $((OPTIND-1))
(примечаниеOPTIND
в верхнем регистре) обычно находится сразу послеgetopts
while
цикла.$OPTIND
это количество вариантов найденныхgetopts
.Как упоминает pauljohn32 в комментариях, строго говоря,
OPTIND
дает позицию следующего аргумента командной строки.Из Справочного руководства по GNU Bash :
shift
nудаляет n строк из списка позиционных параметров. Таким образом
shift $((OPTIND-1))
удаляет все параметры, которые были проанализированыgetopts
из списка параметров, и поэтому после этой точки$1
будет ссылаться на первый не опциональный аргумент, переданный сценарию.Обновить
Как упоминает mikeserv в комментарии,
shift $((OPTIND-1))
может быть небезопасно. Чтобы предотвратить нежелательное расщепление слов и т. Д., Все расширения параметров должны быть заключены в двойные кавычки. Таким образом, безопасная форма для командыshift "$((OPTIND-1))"
источник
find
) могут выглядеть так, как будто они разрешают опции после неопций, но они этого не делают: у них есть операнды, начинающиеся с тире.IFS
, но лучше быть в безопасности, чем потом сожалеть. ;)IFS=0123456789
,shift $((OPTIND-1))
(без кавычек) превратится в,shift ""
который будет игнорироваться (inksh
) или генерировать ошибку (inbash
иdash
).$((...))
просто рассчитывает вещи. В вашем случае он принимает значение$optint
и вычитает 1.shift
удаляет позиционные параметры. В вашем случае это удаляетoptint-1
параметры.Для получения дополнительной информации посмотрите на
help getopts
,help shift
, взгляд наman bash
для «Арифметика расширения», и особенно Google дляgetopts
.источник