Se scriptA
chama scriptB
como
scriptB "$@"
os argumentos da linha de comando usados para chamar scriptA
serão passados para scriptB
, desde que não tenham sido alterados antes da chamada.
Da mesma forma, para a chamada de scriptB
para scriptC
.
Contanto que scriptA
e scriptB
não tentem interpretar, alterar ou alterar o conteúdo de $@
(ou os parâmetros posicionais individuais $1
, $2
, $3
etc.), os argumentos da linha de comando serão passados para scriptC
para serem analisados com getopt
.
Exemplo usando funções em vez de scripts (funciona da mesma forma):
#!/bin/sh
scriptC () {
printf 'Arg: %s\n' "$@"
}
scriptB () {
scriptC "$@"
}
scriptA () {
scriptB "$@"
}
scriptA -param1 -param2
Isso produzirá a saída
Arg: -param1
Arg: -param2
Fazendo a chamada como
scriptA "hello world" --param1 /etc/passwd --param2
produzirá
Arg: hello world
Arg: --param1
Arg: /etc/passwd
Arg: --param2
Ou seja, os parâmetros serão passados para scriptC
sem modificação. Em seguida, é deixado para scriptC
interpretar os parâmetros usando getopt
, getopts
ou por outros meios.