Por exemplo, se eu tiver o script ./foo que usa 10 parâmetros e eu quero apenas passar o 8º parâmetro. A única maneira de saber como fazer isso atualmente é:
./foo '' '' '' '' '' '' '' 'bar'
Existe uma maneira mais fácil / melhor?
shell-script
parameter
Kerry Randolph
fonte
fonte
Respostas:
Outra maneira de fazer isso é nomear o parâmetro que você deseja declarar e, em seguida, fazê-lo:
RESULTADO
No exemplo acima, a variável de ambiente declarada explicitamente é preferida ao argumento da linha de comandos, mas o argumento da linha de comandos é usado quando a variável de ambiente está vazia ou não está definida. Quando a oitava posição e a variável de ambiente
$eight
estiverem vazias ou desabilitadas, o valor padrão a que algum padrão é atribuído$eight
. Em ambos os casos,:
pode ser removido das instruções:-
ou:=
se vazio deve ser um valor aceitável.A variável também
$eight
poderia ter sido definida como:... e a linha anterior foi totalmente omitida, mas eu queria demonstrar que declarar uma variável dessa maneira resulta em um valor persistente, e por isso fiz isso em dois comandos. De qualquer maneira,
$eight
é definido o valor final dessa expansão de parâmetro composto.getopts
- para scripts robustos - geralmente é a melhor maneira de lidar com opções de comando . Parâmetros posicionais, por outro lado, são quase sempre os meios mais simples de manipular robustos operandos em um script.Por exemplo:
RESULTADO
Lá vemos apenas o oitavo operando, mas existem 101 deles no meu diretório de teste.
fonte
Supondo que você possa alterar o script, considere usar parâmetros opcionais (opções) em vez de parâmetros obrigatórios (argumentos).
Se você tiver cada um dos 7 primeiros sete parâmetros como opções e tiver como padrão a sequência vazia, poderá fazer o seguinte:
Se você usa um shell compatível com POSIX, pode usar o
getopts
utilitário ou o programagetopt
.bash
- como a maioria das conchas - oferecegetopts
como um built-in. De qualquer maneira, é mais fácil do que rolar seu próprio analisador de linha de comando.A menos que você implemente algo como os últimos argumentos não opcionais X, os valores dos últimos argumentos Y e XY são obrigatórios. No entanto, isso não é uma prática comum, normalmente uma opção é sempre uma opção e um argumento é um argumento, e a ordem da opção "inserção" é gratuita.
fonte
+1
paragetopt(s)
. Os parâmetros posicionais são um momento triste e devem ser evitados.