Если вы хотите избежать использования $ IFS, используйте $ @ (или не заключайте $ * в кавычки)
$ cat atsplat
IFS="_"
echo " at: $@"
echo " splat: $*"
echo "noquote: "$*
$ ./atsplat this is a test
at: this is a test
splat: this_is_a_test
noquote: this is a test
Поведение IFS также соответствует присвоениям переменных.
$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo " at: $atvar"
echo " splat: $splatvar"
echo "noquote: "$splatvar
$ ./atsplat2 this is a test
at: this is a test
splat: this_is_a_test
noquote: this is a test
Обратите внимание, что если присвоение $ IFS было выполнено после присвоения $ splatvar, то все выходные данные были бы одинаковыми ($ IFS не имел бы эффекта в примере "atsplat2").