Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1532 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [RESOLU]Passer un paramètre avec des espaces

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Passer un paramètre avec des espaces

n°1277409
yoshi42
Posté le 05-01-2006 à 01:55:53  profilanswer
 

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
mood
Publicité
Posté le 05-01-2006 à 01:55:53  profilanswer
 

n°1277419
Elmoricq
Modérateur
Posté le 05-01-2006 à 06:44:29  profilanswer
 

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".

n°1277457
yoshi42
Posté le 05-01-2006 à 10:26:54  profilanswer
 

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
n°1277474
Elmoricq
Modérateur
Posté le 05-01-2006 à 11:12:44  profilanswer
 

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


n°1277480
yoshi42
Posté le 05-01-2006 à 11:33:00  profilanswer
 

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

n°1277485
Elmoricq
Modérateur
Posté le 05-01-2006 à 11:41:36  profilanswer
 

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.

n°1277490
yoshi42
Posté le 05-01-2006 à 11:51:10  profilanswer
 

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
n°1277495
Elmoricq
Modérateur
Posté le 05-01-2006 à 11:59:08  profilanswer
 

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

n°1277500
yoshi42
Posté le 05-01-2006 à 12:09:01  profilanswer
 

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
n°1277508
Elmoricq
Modérateur
Posté le 05-01-2006 à 12:20:51  profilanswer
 

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

mood
Publicité
Posté le 05-01-2006 à 12:20:51  profilanswer
 

n°1277971
yoshi42
Posté le 06-01-2006 à 03:43:34  profilanswer
 

:jap:  merci encore une fois pour ton aide


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [RESOLU]Passer un paramètre avec des espaces

 

Sujets relatifs
[RESOLU]Fin de fichier[resolu]declenche macro par touche clavier
[résolu] Un menu sémantiquement correct ???[Résolu][Batch] Renommer des fichiers
[Résolu]AbstractCollection[VBA-Access (2002)] [Résolu] Requête VBA sur une table jointe
(résolu) vba excel : probleme de typage string[resolu]stocker des données en memoire
[resolu] recherche + le suivant + ... voir autre message[résolu tout seul] Udate avec jointure... J'ai un trou
Plus de sujets relatifs à : [RESOLU]Passer un paramètre avec des espaces


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR