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 set
tenta exibir uma variável que contém caracteres invisíveis. Portanto, ele \t
representa uma tabulação e \n
representa 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.
set
usa 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 \t
está. 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 \t
e \n
são analisados na entrada e convertidos nos códigos de caracteres reais. Portanto, a saída de echo $IFS
parece 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