Will that only change the value of IFS for that specific while loop?
Não, na verdade, isso só será alterado para a parte read . Dentro do corpo do loop de while , e depois disso, ele retornará ao seu padrão, porque ele só terá sido definido dentro do contexto do comando read .
Você pode escrever um simples loop sobre algum arquivo que comprove isso, por exemplo com um arquivo CSV com duas colunas:
#!/bin/bash
while IFS="," read a b; do
echo $a $b
done < "input.csv"
echo $IFS
A última linha de saída será exibida vazia, pois por padrão, o IFS é <space> , <tab> e <newline> , portanto $' \t\n' . Veja a especificação POSIX para detalhes .
Se você (acidentalmente?) configurou o IFS para algum outro valor para o script inteiro, unset IFS redefine para o padrão.
Além disso, se por "sessão", você quer dizer um único script (ou shell que executa um script), assim que o script sair, o valor não será salvo. Seu terminal não o preserva em várias sessões, é claro.