Os parâmetros posicionais do escopo do chamador não estão disponíveis em uma função. Você precisaria do chamador para passá-los para a função de uma forma ou de outra.
Em bash
, isso poderia ser feito com uma matriz (mas tenha cuidado que matrizes diferentes de "$@"
in bash
começam no indice 0 em vez de 1 (como em ksh
, mas ao contrário de todos os outros shells) ).
f() {
printf 'Caller $1: %s\n' "${caller_argv[0]}"
printf ' My $1: %s\n' "$1"
}
caller_argv=("$@")
f blah
Ou passe-os além disso:
f() {
printf 'Caller $1: %s\n' "$2"
shift "$(($1 + 1))"
printf 'My $1: %s\n' "$1"
}
f "$#" "$@" blah
Aqui com $1
contendo o número de argumentos posicionais do chamador, então f
sabe onde seus próprios argumentos começam.