x=@funciona como esperado, não há expansão aqui, $IFSnão importa. Você pode confirmar que $xexpande para @passando o valor corretamente citadoecho para :
echo "$x"
Como você não colocou aspas duplas em seu código original ( echo $x), o shell usou caracteres $IFSpara dividir o valor expandido. O valor @foi dividido em duas strings vazias. Em seguida, as strings vazias sem aspas desapareceram. O resultado foi como se você executasse:
echo
ou seja, echocom zero argumentos. Por padrão, echoimprime um caractere de nova linha de terminação.
Para ver todos os caracteres do seu $IFSem um formato legível por humanos:
Hipótese: o seu
$IFS
contém@
.x=@
funciona como esperado, não há expansão aqui,$IFS
não importa. Você pode confirmar que$x
expande para@
passando o valor corretamente citadoecho
para :Como você não colocou aspas duplas em seu código original (
echo $x
), o shell usou caracteres$IFS
para dividir o valor expandido. O valor@
foi dividido em duas strings vazias. Em seguida, as strings vazias sem aspas desapareceram. O resultado foi como se você executasse:ou seja,
echo
com zero argumentos. Por padrão,echo
imprime um caractere de nova linha de terminação.Para ver todos os caracteres do seu
$IFS
em um formato legível por humanos: