Re: Échapper des espaces dans une variable bash

Page principale

Répondre à ce message
Auteur: Olivier Allard-Jacquin
Date:  
À: guilde
CC: guilde
Sujet: Re: Échapper des espaces dans une variable bash
    Bonsoir

Le 09/10/2011 21:28, Thomas Arnoux a écrit :
> Le 9 octobre 2011 21:17,  <vincent+ml.guilde@???> a écrit :
>> Utiliser plutôt quelque chose de la forme :
>> for file in *
>> do
>>        echo "$file"
>>        blabla
>> done

>>
>> le for va découper proprement au niveau en conservant le snoms de
>> fichiers contenant des espaces, des caractères spéciaux…
>
> En fait, mon problème n'était pas directement celui que j'ai posé
> (mais la solution était bien celle qui m'a été avancée), c'est
> pourquoi je n'avais pas forcément vu ce problème (et que j'ai donné
> l'exemple avec un seul fichier dans le dossier listé).
> Dans mon problème, j'ai un script qui se lance avec une variable qui
> m'est donnée et qui contient un nom de dossier ou de fichier (avec
> parfois des espaces).


    Tout dépend de comment ton script est lancé :
- cas 1:
le_script.sh "nom de fichier.txt"
le_script.sh 'nom de repertoire'


Dans ce cas, comme tu "protèges" les espaces par des guillemets simples
ou double, alors la variable "$1" de "le_script.sh" lira bien le
paramètre (unique), et retrouvera alors son "nom de xxxx". Il n'y aura
d'ailleurs pas du tout de $2 .

- cas 2:
tu tapes
le_script.sh nom
et tu utilises l'auto-compression (la touche "tab"). Ton shell va alors
afficher ceci :

le_script.sh nom\ de\ fichier.txt

Si tu appuies sur la touche "enter", le programme va s'exécuter comme
dans le cas 1, et $1 recevra l'unique paramètre (nom de fichier.txt).

Note: Tu peux taper toi-même "le_script.sh nom\ de\ fichier.txt", cela
marche aussi très bien. C'est simplement plus "pénible" à taper sur un
clavier FR, vu la position du \

- cas 3:
le_script.sh nom de fichier.txt

Rien ne va plus. "le_script.sh" va recevoir non pas 1, mais 3 paramètres :
$1=nom
$2=de
$3=fichier.txt


    Conclusion : C'est au lancement du programme "le_script.sh" qu'il faut
faire attention, et bien mettre les guillemets (ou les \"


    Cordialement,

    
                        Olivier


-- 
~~~~~~~  _____/\_____  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Phoenix /   _ \/ _   \    Olivier Allard-Jacquin
       /   / \  / \   \   Web:  http://olivieraj.free.fr/
      /___/  /  \  \___\  Mail: olivieraj@???
~~~~ /////  ///\\\  \\\\\ ~~~~~~~~~~~~~~~~~~~~~~~ Linux Powered !!