É seguro assumir que o IFS está configurado? [duplicado]

2

Eu vejo o seguinte código em um script:

OLD_IFS="$IFS"
IFS='something-special'
# code that needs the special IFS
# ...
IFS="$OLD_IFS"

Se o IFS não estiver definido antes do fragmento de script, o script o definirá como uma string vazia e os vazios IFS e undefined IFS serão diferentes.

O script provavelmente supõe que IFS esteja sempre definido. É seguro fazer tal suposição?

    
por Zaboj Campula 21.05.2018 / 08:38

1 resposta

3

Sim, é seguro assumir que IFS está definido.

O valor padrão de IFS é uma string que consiste em um espaço, uma tabulação e uma nova linha. Este é um requisito do padrão POSIX :

The shell shall set IFS to <space> <tab> <newline> when it is invoked.

Em um shell bash com configurações padrão, printf '%q\n' "$IFS" mostrará o valor padrão de IFS as

$' \t\n'

É inseguro supor que IFS tenha o valor padrão, e é importante citar adequadamente as expansões para que a divisão de campo não ocorra. É muito divertido considerar o que acontece se IFS contiver dígitos.

Veja também

por 21.05.2018 / 08:50

Tags