Quando defino a IFS
variável para um espaço, bash
trata vários espaços como um espaço ( myprogram
é um programa que imprime os argumentos de linha de comando que recebe):
IFS=" "
x="hello hi world"
./myprogram $x
argv[1] = hello
argv[2] = hi
argv[3] = world
Mas quando defino a IFS
variável para uma vírgula, bash
não trata várias vírgulas como uma vírgula:
IFS=","
x="hello,,,hi,,,world"
./myprogram $x
argv[1] = hello
argv[2] =
argv[3] =
argv[4] = hi
argv[5] =
argv[6] =
argv[7] = world
Por que é que?
Isso está documentado em
man bash
. Uma única ocorrência de qualquer caractere no IFS que não seja um espaço em branco delimita um campo.De
man bash
:Exemplos: divisão de campo
Se o IFS não tiver caracteres de espaço em branco, os espaços em branco serão incluídos nos campos:
Se o IFS tiver espaços em branco e uma vírgula, as sequências de espaços em branco, seguidas por uma vírgula, seguidas por sequências de espaços em branco serão tratadas como um único delimitador:
Sequências de vírgulas são interpretadas como sequências de campos vazios:
Exemplos: espaço em branco inicial e final
Se o IFS não contiver espaços em branco, todos os espaços em branco à esquerda e à direita serão mantidos nos campos:
Se o IFS contiver espaços em branco, todas as sequências iniciais ou finais de espaços em branco serão removidas: