Problème de tirets

Résolu/Fermé
nicopail - 5 mars 2009 à 11:29
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 6 mars 2009 à 11:10
Bonjour à tous!

J'ai un problème de gestion de paramètres comportants des caractères spéciaux...

Je m'explique :

dans un script shell, je fais appel à une fonction qui nécessite de lui renseigner certains arguments :

...

fonction arg1 arg2 arg3 ...

...

L'un de ces paramètres est de la forme : 'A - B', soit :

fonction arg1 arg2 'A - B' ...

Lorsque je l'entre tel quel, il n'ya pas de soucis particuliers. Mais je dois en fait aller récupérer cet argument dans un fichier texte. L'application que j'utilise est ainsi faite qu'en effectuant un "export" dans mon shell, je récupère ce qui m'intéresse mais sous la forme : ENTREE='A - B'.
puisque je dois renseigner l'argument de ma fonction "fonction" précisément, donc dans notre cas avec 'A - B' et non pas ENTREE='A - B', j'utilise une petite ligne qui isole 'A - B' et enlève donc ENTREE= :
Mettons que l'export me fasse disposer de "$X", qui vaut alors ENTREE='A - B'
alors je fais
RESP=${X##*=}
et echo $RESP me renvoie 'A - B'

Et dès lors que j'utilise $RESP en tant qu'argument dans ma fonction, soit :
fonction arg1 arg2 $RESP ...

là j'obtient une erreur "export `-' is not a valid identifier"

Je sollicite donc platement votre avis expert, étant débutant en shell et n'ayant pas saisi l'ensemble des subtilités apportées par export, et surtout l'exploitation de "variables" comportant des blancs, des tirets, etc...

Après lecture de divers tutos, divers posts sur divers forums, j'ai bien tenté diverses combinaisons utilisant les ", les ', etc... Mais je ne m'en sors pas.
En gros ma quesiton est :
quelle est la différence entre "entrer" soi-même 'A - B' en tant qu'argument de la fonction, et récupérer une variable $RESP qui est censé être 'A - B' pour la substituer en tant qu'argument de ma fonction??

Merci à tous ceux qui prendront la peine de me lire jusqu'au bout et qui pourront éventuellement m'éclaircir

3 réponses

mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
5 mars 2009 à 21:17
C'est vraiment très simple. Quand tu écris :
pouet="A - B"
./script.sh $pouet
... tout se passe comme si tu passais
./script.sh A - B

Il faut donc rajouter des guillemets :
./script.sh "$pouet"

Exemple en image : je crée un fichier pouet.sh qui contient :
#!/bin/sh
echo $1

Ensuite :
(mando@aldur) (~) $ sh pouet.sh bla bla
bla
(mando@aldur) (~) $ sh pouet.sh "bla bla"
bla bla
(mando@aldur) (~) $ plop="bla bla"
(mando@aldur) (~) $ sh pouet.sh $plop
bla
(mando@aldur) (~) $ sh pouet.sh "$plop"
bla bla

Bonne chance
0
Merci, mais effectivement cette interprétation des tirets était pour moi OK, il semblerait que le pb venait de la fameuse "fonction" que j'utilisais...D'autant que les param désormais ont été modifiés et ne comportant plus de tirets et autres caractères un peu spéciaux, mon pb a donc disparu!!

Merci encore, ta réponse me permet de mieux comprendre les manip de variables en shell, c'est toujours un plus!
bonne journée, bon week-end!
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
6 mars 2009 à 11:10
De même, bon week end et bonne continuation.
0