Usar $*
ou $@
não citado nunca faz sentido.
"$*"
é a concatenação dos parâmetros posicionais com o primeiro caractere (ou byte dependendo do shell) de $IFS
, "$@"
é a lista de parâmetros posicionais.
Quando não estiver marcado, é o mesmo, mas sujeito a split + glob (ou apenas remoção vazia com zsh
) como qualquer outra expansão de parâmetro sem aspas (alguns shells também separam argumentos em $*
mesmo se $IFS
estiver vazio ).
Aqui você deseja passar a lista de argumentos como-é para sua função, por isso é:
SetArgs "$@"
[...]
Function1 "$@"
Note que com o ksh88, $IFS
tem que conter o caractere de espaço (o que ele faz por padrão) para que funcione corretamente (um bug herdado do shell Bourne, corrigido em ksh93).
Observe também que, com algumas implementações de ksh
(como versões anteriores de zsh
in ksh
emulation),
export DirectoryName=$1
é um caso de invocação split + glob. export
é um desses comandos em shells semelhantes ao Korn que podem avaliar o código do shell através da avaliação aritmética em índices de array ), então é um daqueles casos em que é importante citar variáveis para evitar a introdução de vulnerabilidades de injeção de comando .
Exemplo:
$ (exec -a ksh zsh-4.0.1 -c 'export x=$a' ksh 'foo psvar[0'uname>&2']')
Linux
Observe que [ $# -gt 0 ]
é outra chamada split + glob que não faz sentido (é menos provável que seja um problema pelo menos com o valor padrão de $IFS
).