Variável IFS no Linux

Variável IFS no Linux

Prezados, Alguma ideia de por que estou vendo um valor em branco para a variável IFS.

bash-4.2$ set | grep -i ifs
IFS=$' \t\n'

bash-4.2$ echo $IFS

bash-4.2$
bash-4.2$

Responder1

Você está vendo um valor em branco porqueisso é o queésempre armazenado em IFS: contém um espaço (invisível), uma tabulação (também invisível) e um avanço de linha (invisível também).

Ele não contém cifrão, nem barras invertidas, nem letras: é simplesmente assim que settenta exibir uma variável que contém caracteres invisíveis. Portanto, ele \trepresenta uma tabulação e \nrepresenta uma quebra de linha, e o entorno $'...'indica que as combinações de barras invertidas devem ser interpretadas como caracteres especiais e não como texto literal.

setusa este formato específico porque também pode ser fornecidovoltarpara o shell como parte de algum outro comando. Por exemplo, run echo $'Hello\tworld!imprimiria uma guia onde \testá. E na verdadecorrendo IFS=$' \t\n'como um comando, de fato, definiria a variável IFS como espaço + tabulação + quebra de linha.

Responder2

Porque \te \nsão analisados ​​na entrada e convertidos nos códigos de caracteres reais. Portanto, a saída de echo $IFSparece espaços (e alguns são removidos pela análise de argumentos, já que você não citou). Se você quiser ver o conteúdo real, converta para hexadecimal e não se esqueça de citar para evitar que os caracteres sejam analisados:

IFS=$' \t\n'
printf '%s' "$IFS" | hd
00000000  20 09 0a                                          | ..|
00000003
0

informação relacionada