Divisão de palavras no Bash com IFS definido como um caractere que não é um espaço em branco

Estou passando por uma festançatutoriale, especificamente, o assunto da divisão de palavras.

Este script, chamado "args", ajuda a demonstrar exemplos de divisão de palavras:

#!/usr/bin/env bash
printf "%d args:" $#
printf " <%s>" "$@"
echo

Um exemplo:

$ ./args hello world, here is "a string of text!"
5 args: <hello> <world,> <here> <is> <a string of text!>

Por enquanto, tudo bem. Eu entendo como isso funciona.

No entanto, quando substituo o IFS por um caractere que não seja espaço em branco, diga:, o script não executará a divisão de palavras se eu passar a string diretamente como argumento.

$ ./args one:two:three
1 args: <one:two:three>

No entanto, o scriptfaz execute a divisão de palavras na mesma sequência se I (1) atribuir a sequência a uma variável e (2) passar a sequência para o script via expansão de parâmetros.

$ IFS=:
$ variable="one:two:three"
$ ./args $variable
3 args: <one> <two> <three>

Por quê? Especificamente, por que a passagem da string como argumento sofre divisão de palavras quando o IFS está desconfigurado e os delimitadores são caracteres de espaço em branco, mas não quando o IFS é definido como caracteres que não são de espaço em branco?

Quando eu usoread em vez desse script, a mesma sequência também passa pela divisão de palavras conforme o esperado.

$ IFS=:
$ read a b c
one:two:three
$ echo $a $b $c
one two three

questionAnswers(1)

yourAnswerToTheQuestion