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.