Mudança IFS não entrando em vigor

3

Eu estava tentando alterar o caractere IFS ( Separador de campo interno ) para vírgula para um processamento de arquivo, mas para minha surpresa, o IFS não foi alterado.

Aqui está a ordem dos comandos e saída:

mtk4@mtk-laptop:~$ echo .$IFS.
. .                                    # A space
mtk4@mtk-laptop:~$ IFS=","             # No error was thrown, no message
mtk4@mtk-laptop:~$ echo .$IFS.
. .                                    # Again echo'd it, but no change

Por favor, deixe-me saber, o que está errado aqui?

    
por mtk 18.10.2012 / 20:50

2 respostas

7

O IFS também é usado como um separador ao expandir um $variable sem aspas ao redor dele. Em outras palavras, você mudou, mas foi tratado como um separador entre os dois pontos. E o comando echo não sabe qual é o seu $ IFS e, mesmo que tenha, ele não o coloca entre seus argumentos para saída, então você tem um espaço lá. Experimente echo ".$IFS."

    
por 18.10.2012 / 20:58
1

Usando bash , você pode usar o comando printf incorporado com o especificador de formato %q para inspecionar o valor da variável IFS (consulte help printf ).

printf '%q\n' "$IFS"    # $' \t\n'

# alternative, as already suggested by jw013
printf '%s' "$IFS" | od -A n -t x1 | xargs     # 20 09 0a
    
por 17.04.2013 / 09:24

Tags