Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/07/2014, à 08:57

ar barzh paour

[Résolu] piège de la protection de variable

je me suis fait piéger dans un script à cause de ça

#!/bin/bash
echo "Attention à la protection des variables"
echo "un exemple : le piège des guillemets "
# Tab espace A Tab espace B Tab espace C Tab espace D (12 caractères)
ori="	 A	 B	 C	 D" 

echo "echo d'une chaîne  Tab espace A Tab espace B Tab espace C Tab espace D"
echo "en utilisant des guillemets"
echo "$ori"
echo -e "nombre de caractères (fin de ligne compris) : \c" ; echo "$ori"|wc -c
echo
echo "remplacement des espaces par o"
mot=`sed 's/ /o/g' <<< "$ori"`
echo "$mot"
echo -e "nombre de caractères (fin de ligne compris) : \c" ; echo "$mot"|wc --c
echo "tout ça c'est bien"

le résultat

Attention à la protection des variables
un exemple : le piège des guillemets
echo d'une chaîne  Tab espace A Tab espace B Tab espace C Tab espace D
en utilisant des guillemets
     A     B     C     D
nombre de caractères (fin de ligne compris) : 13

remplacement des espaces par o
    oA    oB    oC    oD
nombre de caractères (fin de ligne compris) : 13
tout ça c'est bien

#!/bin/bash
echo "et maintenant echo de la chaîne"
echo " Tab espace A Tab espace B Tab espace C Tab espace D"
echo "SANS UTILISER DE GUILLEMETS"
ori="	 A	 B	 C	 D" 
echo $ori
echo -e "nombre de caractères (fin de ligne compris) : \c" ; echo $ori|wc --c
echo
echo "remplacement des espaces par o" 
mot=`sed 's/ /o/g' <<< $ori`
echo "$mot"
echo -e "nombre de caractères (fin de ligne compris) : \c" ; echo $mot|wc --c

le résulat

et maintenant echo de la chaîne
Tab espace A Tab espace B Tab espace C Tab espace D
SANS UTILISER DE GUILLEMETS
A B C D
nombre de caractères (fin de ligne compris) : 8

remplacement des espaces par o
AoBoCoD
nombre de caractères (fin de ligne compris) : 8

ça c'est pas terrible
donc bien protéger les variables !!!!!

Dernière modification par ar barzh paour (Le 04/07/2014, à 06:22)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 02/07/2014, à 09:38

tiramiseb

Re : [Résolu] piège de la protection de variable

Salut,

donc bien protéger les variables !!!!!

Très bonne conclusion, pour ma part je les protège toujours, même si je suis certain qu'il n'y aura jamais d'espaces.

Une bonne manière pour y penser, c'est de se rappeler la manière dont les shells travaillent.

Avec un langage "classique", quand on donne une variable à une fonction, bah la fonction reçoit la valeur de la variable, point.

Un shell, par contre, va remplacer le "$machintruc" par le contenu de la variable avant interprétation de la ligne et va ensuite exécuter la ligne comme si on l'avait tapée soi-même. Donc s'il n'y a pas de guillemets, c'est comme s'il y avait plusieurs arguments.

Hors ligne

#3 Le 04/07/2014, à 06:29

ar barzh paour

Re : [Résolu] piège de la protection de variable

merci pour la précision
c'est bien différence entre les deux saisies:

xxx@xxxdesktop:~$ echo  A      B C     D
A B C D
xxx@xxx-desktop:~$ echo  "A      B C     D"
A      B C     D
xxx@xxx-desktop:~$


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne