Am I right that read first second is a subprocess of the current shell process? If yes, why don't we need export IFS=";"?
Não, read é uma função de bultin bash . Nenhum subshell ou subprocesso é criado aqui, portanto, não é necessário exportar IFS .
why is IFS empty?
Porque você não usa aspas duplas. Você alterou o valor do IFS para ; , portanto, quando você echo $IFS , após $IFS ser expandido para ; , o shell executa spliting e globbing de palavras, com ; como separador. Então nada é impresso.
Tente:
$ IFS=";"
$ printf "%s\n" $IFS
$ printf "%s\n" "$IFS"
;
Nota