On Sun, 15 Dec 2002 15:26:58 -0400
Christophe PEREZ <[EMAIL PROTECTED]> wrote:


> Le seul tout petit d�faut que j'ai, c'est que le traitement des
> majuscules/minuscules n'est plus correct quand je n'ai pas la m�me
> arborescence initiale et qu'un des 2 chemins contient un espace.

voil� pourquoi je disais de quoter. il faut entourer les noms de variables, le $ y 
compris avec "" pour pr�server les espaces dans les noms de fichiers ou de 
r�pertoires. mais c'est insuffisant pour la variable tableau qui va traiter chaque 
espace comme un s�parateur de champ. l'astuce consiste � d�finir $IFS avec \n 
(nouvelle ligne) comme s�parateur de champ, et dans ce cas pr�cis, d'utiliser l'option 
-1 de ls qui pr�sente chaque r�sultat sur une ligne.

exemple:
$ orig="/home/toto/rep1/rep2/fichier"
$ CIBLE="/home/toto/rep A/rep2/FICHIER"
$ ls {$orig,$CIBLE}
ls: /home/toto/rep aucun fichier ... etc
ls: A/rep2/FICHIER aucun fichier ... etc
/home/toto/rep1/rep2/fichier
#l'espace perturbe l'interpr�tation par ls qui d�coupe le nom en 2

$ ls {"$orig","$CIBLE"}
/home/toto/rep1/rep2/fichier /home/toto/rep A/rep2/FICHIER
#les doubles quotes permettent une interpr�tation normale sur une ligne

$ ls -1 {"$orig","$CIBLE"}
/home/toto/rep1/rep2/fichier
/home/toto/rep A/rep2/FICHIER
#avec -1, l'affichage se fait sur deux lignes

$ RANG=($(ls -t1 {"$orig","$CIBLE"}))
$ echo ${RANG[0]}
/home/toto/rep1/rep2/fichier
$ echo ${RANG[1]}
/home/toto/rep
#l'espace a d�limit� le champ -> d�coupage du nom

$ echo ${RANG[2]}
A/rep2/toto
#la suite est dans le champ suivant

$ OIFS=$IFS; IFS=$'\t'
#je sauvegarde l'ancien $IFS et supprime l'espace de $IFS ou je ne garde
#que le saut de ligne et je recommence.

$ RANG=($(ls -t1 {"$orig","$CIBLE"}))
$ echo ${RANG[0]}
/home/toto/rep1/rep2/fichier
$ echo ${RANG[1]}
/home/toto/rep A/rep2/FICHIER
#les 2 champs sont � nouveau tels qu'attendus (et exploitables)

$ IFS=$OIFS
#je remets $IFS � sa valeur initiale au cas o� ...

un petit truc:
lorsqu'une variable contient plusieurs espaces � la suite, il suffit de la 
double-quoter pour pr�server les espaces.
$ a="abc def   ghi"
$ echo $a
abc def ghi
$ echo "$a"
abc def   ghi
supprimer l'espace de $IFS permet de se passer de double-quotes avec echo. je trouve 
que c'est m�me plus confortable dans un script. en tout cas moins de prise de t�te 
lorsqu'il faut d�buguer. 
$ IFS=$'\n'
$ echo $a
abc def   ghi

> > si seul
> 
> Pourquoi seul ?
> Seul voyant au pays de tous ces aveugles que nous sommes ? 
> 

arf !!! non :)
j'avais commenc� une ligne par "si seulement". j'ai du l'effacer incompl�tement puis y 
revenir en oubliant le petit bout non effac� qui est rest�, si seul, � la fin du 
message. 
avec 4 enfants de 10 � 18 ans, c'est difficile d'�tre seul ... ;)
(des fois j'aimerais bien ...)

bye
jipe
        <- j'ai fait attention qu'il ne reste plus rien l� !

Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com";

Répondre à