Como verificar o valor atual do IFS?

6

No momento, estou executando um script de shell e suspeito que o problema seja porque acidentalmente alterei o valor padrão de IFS que é um espaço para outra coisa.

Eu quero verificar o valor atual do IFS, mas não sei como encontrá-lo.

Estou executando meu Ubuntu no VMWare.

    
por Computernerd 21.03.2014 / 05:31

4 respostas

9

Como você provavelmente já sabe, o valor padrão de IFS é <space><tab><newline> . Usando:

echo "$IFS"

você provavelmente pode deduzir que há um caractere de nova linha e alguns outros caracteres de espaço em branco, mas nada é certo.

Para ter certeza sobre o valor exato da variável IFS , você pode recorrer à ajuda do comando cat da seguinte forma:

echo "$IFS" | cat -ETv

que é equivalente a:

cat -ETv <<< "$IFS"

Exemplo de saída para o valor padrão de IFS :

cat -ETv <<< "$IFS"
 ^I$
$

A partir da saída anterior, você pode deduzir que há, com certeza, um caractere de espaço no início e um caractere de nova linha. Mas o que é com os outros personagens estranhos. Vamos ver o man cat :

   -E, --show-ends
          display $ at end of each line

   -T, --show-tabs
          display TAB characters as ^I

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD (n.a. linefeed or newline character) and TAB

Portanto, a sequência ^I da saída acima significa um caractere TAB e os outros dois caracteres $ significam o fim da linha.

    
por Radu Rădeanu 21.03.2014 / 13:35
9
> printf %q "$IFS"
' \t\n'

O argumento %q format é usado para interpolar a variável citada $IFS e escapa dos caracteres de controle que seriam interpretados pelo shell.

Aqui você pode ver que o IFS se separa em espaços, guias e novas linhas.

    
por Bryce Guinta 21.11.2016 / 23:35
1
$ echo -n "$IFS" | od -abc
0000000  sp  ht  nl
        040 011 012
             \t  \n
0000003

link

    
por Alex Ryan 09.01.2017 / 22:08
0

O comando echo $IFS (observe a ausência de aspas duplas) pode não mostrar o valor do IFS corretamente devido a divisão de palavras .

Por exemplo:

IFS=:
echo $IFS  # shows a blank line

Portanto, a maneira correta de exibir o IFS é:

echo "$IFS"

Outras formas são:

set | grep -w IFS # shows IFS=$' \t\n'
printf '[%s]\n' "$IFS"

Relacionados:

por codeforester 07.06.2018 / 19:15