#1 Le 02/07/2014, à 07: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) : 13remplacement 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) : 8remplacement 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, à 05:22)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 08: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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#3 Le 04/07/2014, à 05: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 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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