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"