anne aublanc a écrit :
>bonjour,
>
>J'ai ce code
>
>#!/bin/sh
>...
># read file for multicast
>if [ "${FAXNUMTOS}" != "" ] ; then
> i=0
> cat ${FAXLIST} | while read line # read file line by line
> do
> NBRLIST[$i]=`echo $line | cut -d"|" -f1 ` # extract numéro fax
>destinataire (obligatoire)
> NAMEDEST[$i]=`echo $line | cut -d"|" -f2 ` # nom destinataire
>(facultatif)
> i=$(($i+1))
> echo $i
> echo ${NBRLIST[@]}
> done
> echo "--$i--"
> i=$(($i-1))
> echo "--${i}--"
> echo "--${NBRLIST[@]}--"
>fi
>...
>
>résultat :
>+ i=0
>+ cat /tmp/listfax
>+ read line
>++ echo '123456||'
>++ cut '-d|' -f1
>+ NBRLIST[$i]=123456
>++ echo '123456||'
>++ cut '-d|' -f2
>+ NAMEDEST[$i]=
>+ i=1
>+ echo 1
>1
>+ echo 123456
>123456
>+ read line
>++ echo '987654321|titi|'
>++ cut '-d|' -f1
>+ NBRLIST[$i]=987654321
>++ echo '987654321|titi|'
>++ cut '-d|' -f2
>+ NAMEDEST[$i]=titi
>+ i=2
>+ echo 2
>2
>+ echo 123456 987654321
>123456 987654321
>+ read line
>+ echo --0--
>--0--
>+ i=-1
>+ echo ---1--
>---1--
>+ echo ----
>----
>
>Quand je sors de la boucle, y-a plus rien dans le tabeau et dans la variable
>i
>
>Si vous pouviez m'expliquer l'erreur!
>
>anne
>
>
>
ton problème vient d'un subshell :
cat ${FAXLIST} | while read line
le | invoque automatiquement un subshell
or les variables d'un subshell n'ont comme portée que le subshell
plus sérieusement :
NUMBERS=$( cat ${FAXLIST} | cut -d '|' -f 1 )
NAMEDEST=$( cast ${FAXLIST} | cut -d '|' -f 2 )
jlm@xyz:~$ cat > faxs <<EOF
> 987654321|titi|
> 123456|a|
> EOF
jlm@xyz:~$ export NUMBERS=$(cat faxs | cut -d '|' -f 1)
jlm@xyz:~$ export NAMEDEST=$(cat faxs | cut -d '|' -f 2)
jlm@xyz:~$ echo $NUMBERS
987654321 123456
jlm@xyz:~$ echo $NAMEDEST
titi a
jlm@xyz:~$
le problème en shell c'est qu'il ne faut pas penser de manière
"programmation linéaire" mais de la façon "groupe de fonctions"