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";

Reply via email to