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.