[RESOLU]Passer un paramètre avec des espaces

Passer un paramètre avec des espaces [RESOLU] - Shell/Batch - Programmation

Marsh Posté le 05-01-2006 à 01:55:53    

Ca fait un moment que je galere avec ce probleme

Code :
  1. numerote "filmedia $param2"


quand il y a pas d'espace dans param2 la variable est correctement transmis à la fonction
mais quand je mets un espace dans la variable param2 ça ne fonctionne plus
j'ai tout essayé  

Code :
  1. numerote "filmedia \"$param2\""


Code :
  1. numerote 'filmedia "$param2"'


rien ne fonctionne
Auriez vous des idées?
Merci d'avance


Message édité par yoshi42 le 06-01-2006 à 03:45:08
Reply

Marsh Posté le 05-01-2006 à 01:55:53   

Reply

Marsh Posté le 05-01-2006 à 06:44:29    

Ca dépend de ce que tu veux faire.
 
Personnellement quand j'ai un paramètre susceptible de contenir des espaces, je le place en dernier et dans mon script, je concatène tout à coup de "shift".

Reply

Marsh Posté le 05-01-2006 à 10:26:54    

Elmoricq a écrit :

Ca dépend de ce que tu veux faire.
 
Personnellement quand j'ai un paramètre susceptible de contenir des espaces, je le place en dernier et dans mon script, je concatène tout à coup de "shift".


Je ne comprends pas tres bien : shift c'est bien pour modifier les paramètres positionnels du script, non?
Ici j'aimerai envoyer un parametre avec ou sans espace espace à la fonction filmedia
je m'explique :
 

Code :
  1. filmedia "$param2"


ce script fonctionne car je quote le param2 donc il envoie le parametre avec les espaces
 
le probleme c'est que je fais passer le tout comme parametre à une autre fonction (numerote)

Code :
  1. numerote "filmedia $param2"


j'utilise donc deja les guillemets
dès lors comment puis je faire pour lui transmettre le parametre param2 avec les espaces??


Message édité par yoshi42 le 05-01-2006 à 10:27:48
Reply

Marsh Posté le 05-01-2006 à 11:12:44    

shift effectue un "décalage vers la gauche" des paramètres : $9 devient $8, $8 devient $7, ..., $2 devient $1 et le contenu $1 est perdu.
 
Dans ton cas particulier, ça te permet de lire $1, puis de lire $2 suivi de shift, jusqu'à ce que $2 soit vide :
 


param1=$1
 
while [ -n "$2" ] ; do
 param2="$param2 $2"
 shift
done


Reply

Marsh Posté le 05-01-2006 à 11:33:00    

Tu m'as mal compris.
Je ne veux pas lire tous ce qui a dans param2
je veux que param2 contienne une chaine avec des espaces.
Cette variable va servir dans un grep pour trouver une ligne contenant la chaine en question
je sais pas si je suis clair :sweat:  
je répéte que ça, ça fonctionne tres bien

Code :
  1. filmedia "$param2"


mon probleme vient uniquement du fait que je passe le tout comme parametre d'une autre fonction

Code :
  1. numerote "filmedia $param2"


et la je ne peux plus quoter param2, donc quand il contient des espaces ça ne fonctionne plus

Reply

Marsh Posté le 05-01-2006 à 11:41:36    

yoshi42 a écrit :

Tu m'as mal compris.


 
Il semblerait.
 

yoshi42 a écrit :

Je répéte que ça, ça fonctionne tres bien

Code :
  1. filmedia "$param2"


mon probleme vient uniquement du fait que je passe le tout comme parametre d'une autre fonction

Code :
  1. numerote "filmedia $param2"


et la je ne peux plus quoter param2, donc quand il contient des espaces ça ne fonctionne plus


 
chezmoiçamarche :
 

$ cat test.ksh
#! /usr/bin/ksh
 
echo "reçu : $1"  
 
$ soleil="truc chose bidule"
$ test.ksh "1 2 3 $machin"
reçu : 1 2 3 truc chose bidule
$


 
Je ne comprends pas où se situe ton problème.

Reply

Marsh Posté le 05-01-2006 à 11:51:10    

Construction de la variable et transmssion à la fonction

Code :
  1. param2=$(echo "($temp)" | sed "s/*/.*/g" | sed "s/ /\\\ /g" )
  2. echo "p1avant $param1" #pour tester en entrée le parametre1
  3. echo "p2avant $param2" #pour tester en entrée le parametre2
  4. numerote "filmedia $param1 $param2"


 
La fonction

Code :
  1. function filmedia(){
  2. echo "p1apres $1" #pour tester en sortie le parametre1
  3. echo "p2apres $2" #pour tester en sortie le parametre2


 
voici 2 sorties:
sortie1 quand pas d'espace dans p2

Code :
  1. p1avant artiste
  2. p2avant (Pen.*)
  3. p1apres artiste
  4. p2apres (Pen.*)


sortie2 quand espace dans p2

Code :
  1. p1avant artiste
  2. p2avant (Pen\ of)
  3. p1apres artiste


-->Quand je met un espace je n'arrive pas à récupérer le parametre 2 dans la fonction.


Message édité par yoshi42 le 05-01-2006 à 11:53:09
Reply

Marsh Posté le 05-01-2006 à 11:59:08    

Je pense que c'est dans "numerote" qu'il y a une mauvaise gestion des paramètres.

Reply

Marsh Posté le 05-01-2006 à 12:09:01    

Elmoricq a écrit :

Je pense que c'est dans "numerote" qu'il y a une mauvaise gestion des paramètres.


pourtant elle est plutot basique cette fonction

Code :
  1. #la fonction qui va numéroter les sorties
  2. function numerote(){
  3. #initialisation de la variable qui va permettre la numérotation
  4. numero=$((1))
  5. #$1 est une sortie texte passé en paramètre à la fonction numerote
  6. $1 | while read line
  7. do
  8. echo "$numero : $line"
  9. numero=$(($numero+1))
  10. done
  11. }


Message édité par yoshi42 le 05-01-2006 à 12:09:24
Reply

Marsh Posté le 05-01-2006 à 12:20:51    

Ok, j'ai pu isoler ton problème.
 
Soit dans filmedia() tu appliques la solution du shift comme je te disais au début, soit tu fais :

numerote "filmedia $param1 '$param2'"


 
Et :

eval $1 | while read line

Reply

Marsh Posté le 05-01-2006 à 12:20:51   

Reply

Marsh Posté le 06-01-2006 à 03:43:34    

:jap:  merci encore une fois pour ton aide


Message édité par yoshi42 le 06-01-2006 à 03:50:51
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed