O IFS, ou Internal Field Separator
, é uma variável crucial no shell Bash que define o delimitador que o Bash usa para dividir strings em palavras durante a leitura de entradas e o processamento de comandos. Essa variável de ambiente desempenha um papel fundamental em como o Bash interpreta os dados de entrada e como manipula a expansão de palavras.
O valor padrão do IFS inclui espaço, tabulação e nova linha, que são usados para separar campos em comandos shell. Isso significa que, por padrão, quando o Bash lê uma linha de texto, ele considera espaços, tabs e quebras de linha como delimitadores para dividir a linha em palavras separadas.
Você pode modificar o IFS para mudar o comportamento de como strings são divididas em comandos e scripts. Isso é particularmente útil em scripts que precisam processar entradas de texto formatadas de maneira específica, como dados separados por vírgulas ou outros delimitadores personalizados.
Suponha que você tenha uma string de dados separados por vírgulas e queira iterar sobre cada item. Você pode ajustar o IFS para tratar a vírgula como delimitador:
string="um,dois,três,quatro"
IFS=',' # Ajustando o IFS para vírgula
for item in $string; do
echo "Item: $item"
done
Neste exemplo, o loop for vai iterar sobre cada termo separado por vírgula na string. Resetar o IFS após o uso é uma boa prática para evitar comportamentos inesperados em outras partes do script:
old_IFS="$IFS" # Salva o IFS antigo
IFS=',' # Novo IFS para vírgula
# Processamento aqui
IFS="$old_IFS" # Restaura o IFS original
Alterações no IFS podem afetar comandos subsequentes e comportamentos de script. É uma boa prática limitar a modificação do IFS ao escopo onde ela é necessária, ou garantir que o IFS seja restaurado ao seu valor original depois de usado.
Se o IFS inclui o espaço (como no padrão), dados que contêm espaços podem ser inesperadamente divididos. Isso deve ser levado em conta ao processar texto que pode incluir espaços significativos.
Para evitar efeitos colaterais, é recomendável alterar o IFS dentro de funções usando variáveis locais para IFS, mantendo assim o resto do script inalterado.
Ao usar o comando read, o IFS também afeta como a entrada é lida. Por exemplo:
read -p "Digite dois nomes separados por espaço: " nome1 nome2
Se o IFS estiver configurado para espaço, nome1
receberá a primeira palavra e nome2
receberá o restante da linha.