Il ne faut pas confondre les variables d'environnement avec les variables du shell. L'environnement, c'est a dire les variables "exportees", c'est ce qui est transmis a tous les processus fils. Si tu declares une variable sans l'exportee, seul le shell dans lequel tu es saura qu'elle existe.
Qu'on fasse un "export i=10" ou un "i=10", "echo $i" affichera 10 parce que le $i est sur la ligne de commande et que c'est le shell qui fait le boulot jusque la.
Par contre et pour completer l'exemple de eddy, si tu fais un shell script `go'
#!/bin/bash
echo i vaut $i
echo j vaut $j
Et que tu fais i=10 ; export j=20 ; ./go
Tu verras que le i dans go ne vaut rien. j par contre a ete mis dans l'environnement via export et sera donc vu par le processus fils `go'.