Então estou testando o seguinte:
foo() {
printf "\nAll the parameters, each on a separate line:\n"
printf "param: %s\n" "$@"
}
foo The "nicely colored" rainbow
A saída é:
All the parameters:
param: The
param: nicely colored
param: rainbow
Portanto, se entendi corretamente, porque IFS
está definido para \t\n
obtermos os parâmetros separados por tabulação (o primeiro caractere de IFS
).
Mas por que eles são impressos em linhas separadas?
É o printf executado para cada parâmetro. Ou seja, o bash converte isso em um loop for?
Além disso, o seguinte (sem aspas duplas) gera o mesmo resultado:
printf "param: %s\n" $@
O que está acontecendo aqui é que quando você passa
printf
mais argumentos do que tem parâmetros de formatação posicional para (%s
e outras coisas), ele repetirá o formato. E está repetindo em várias linhas porque você tem\n
em sua string de formato. Não há nada de especial$@
neste caso.Por exemplo: