lis="a:b:c:d:"
IFS=:
Se eu executar o seguinte código,
for i in "a:b:c:d:";
do
echo the output is $i
done
Eu recebo:
the output is a b c d
Se eu substituir "a:b:c:d:" por $lis:
for i in $lis;
do
echo the output is $i
done
Eu tenho a saída esperada:
the output is a
the output is b
the output is c
the output is d
Gostaria de saber o que está errado, $lis é basicamente o mesmo que "a:b:c:d"
A grande diferença é onde a divisão de palavras é realizada. Aspas duplas garantem que uma string literal ou variável entre aspas
"$lis"
seja tratada como um item únicoPortanto, neste loop, as aspas duplas
"a:b:c:d:"
são um único item, por isso você vê apenas uma linha de saídaAqui o
$lis
não está entre aspas, portanto, o shell executará a divisão de palavras de acordo com oIFS
valor que você definiu. O shell verá que há 4 itens fornecidos para o loop for. Daí porque você vê quatro linhas de saída.Se você colocar aspas duplas
"$lis"
na variável, a divisão de palavras não será executada, portanto, você deverá ver uma saída idêntica - apenas uma linha - ao primeiro caso.