Eu não sou um cara do Linux, mas preso em algum script que eu tenho que ler para o meu projeto. Então, alguém pode me ajudar com o que esse comando está fazendo?
shift $(($optind - 1))
bash
shell
shell-script
Calça Gaurav
fonte
fonte
Respostas:
shift $((OPTIND-1))
(notaOPTIND
é maiúscula) normalmente é encontrado imediatamente após umgetopts
while
loop.$OPTIND
é o número de opções encontradas porgetopts
.Como pauljohn32 menciona nos comentários, estritamente falando,
OPTIND
fornece a posição do próximo argumento da linha de comando.No Manual de Referência do GNU Bash :
shift
nremove n strings da lista de parâmetros posicionais. Assim,
shift $((OPTIND-1))
remove todas as opções analisadasgetopts
da lista de parâmetros e, depois desse ponto,$1
se refere ao primeiro argumento de não opção transmitido para o script.Atualizar
Como mikeserv menciona no comentário,
shift $((OPTIND-1))
pode não ser seguro. Para evitar a divisão indesejada de palavras, etc, todas as expansões de parâmetro devem ser citadas duas vezes. Portanto, o formulário seguro para o comando éshift "$((OPTIND-1))"
fonte
find
) podem parecer que permitem opções após não-opções, mas não o fazem: eles têm operandos que começam com um traço.IFS
, mas é melhor prevenir do que remediar. ;)IFS=0123456789
,shift $((OPTIND-1))
(sem aspas) se transformará noshift ""
que será silenciosamente ignorado (inksh
) ou gerará um erro (inbash
edash
).$((...))
apenas calcula coisas. No seu caso, leva o valor de$optint
e substracts 1.shift
remove parâmetros posicionais. No seu caso, ele removeoptint-1
parâmetros.Para mais informações dê uma olhada
help getopts
,help shift
, olhadaman bash
para "Expansão Aritmética", e especialmente o Google paragetopts
.fonte