kejako Posté(e) le 13 novembre 2010 Partager Posté(e) le 13 novembre 2010 ######Code################################################################## id_arg="struct\ r_debug" echo $id_arg var="/usr/include/utmpx.h" echo $var echo "Debut1" grep struct\ r_debug /usr/include/utmpx.h | read recherche_suite echo "Fin1" echo "Debut2" grep $id_arg $var | read recherche_suite echo "Fin2" #####Fin_Code############################################################## Voici le résultat dans le shell : struct\ r_debug /usr/include/utmpx.h Debut1 Fin1 Debut2 grep: Barre oblique inverse en suffixe Fin2 T_T, je ne comprend pas comment grep a pu me sortir une erreur : Barre oblique inverse en suffixe. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 13 novembre 2010 Partager Posté(e) le 13 novembre 2010 Essaye avec des guillemets simples autour de $id_arg Lien vers le commentaire Partager sur d’autres sites More sharing options...
kejako Posté(e) le 14 novembre 2010 Auteur Partager Posté(e) le 14 novembre 2010 yes ! "$id_arg" marche comme je le veux. Merci !! Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 16 novembre 2010 Partager Posté(e) le 16 novembre 2010 Je comprends pas pourquoi tu veux protéger ton espace... Lien vers le commentaire Partager sur d’autres sites More sharing options...
kejako Posté(e) le 17 novembre 2010 Auteur Partager Posté(e) le 17 novembre 2010 ##test.sh echo $1 echo "grep $1 $2" ###End_test.sh dans le shell : % bash test.sh struct\ r_debug /usr/include/utmpx.h struct r_debug grep struct r_debug /usr/include/utmpx.h % Si 'executais j'aurais cette erreur : Erreur r_debug n'est pas un fichier (et même si, ce n'est pas dans lui que je veut faire ma recherche) Pour resoudre ce problème je doit étendre mon argument comme ceci : arg=$1 new_arg=${arg// /\ } qui remplace tout les espaces par slash espace. puis en donnant echo "grep $new_arg $var" j'ai le bon affichage a savoir : struct\ r_debug grep struct\ r_debug /usr/include/utmpx.h En faite il faut verifier tout les arguments quand on veut les réutiliser. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 17 novembre 2010 Partager Posté(e) le 17 novembre 2010 Nan mais attends, ce que tu voudrais faire, c'est grep "struct r_debug" /usr/include/utmpx.h si tu fais grep struct r_debug /usr/include/utmpx.h tu passes 3 arguments à grep $1 = struct $2 = r_debug et $3 = /usr/include/utmpx.h Or tu ne veux passer que 2 arguments $1 = struct r_debug et $2 = /usr/include/machin.h C'est l'espace qui fout la merde, parce que bash l'interprete comme un séparateur entre arguments. Il faut donc protéger ton espace. Tu as deux solution pour le faire. Soit, tu invoques grep struct\ r_debug /usr/include/truc.h et tu protège l'espace par un \ Soit tu invoques grep "struct r_debug" /usr/include/plop.h et tu protèges l'espace en signifiant à bash que le premier argument est "struct r_debug" du coup, si tu fais id_arg="struct r_debug" grep "${id_arg}" ${var} | read recherche_suite Sans mettre le \, ça devrait marcher aussi Lien vers le commentaire Partager sur d’autres sites More sharing options...
kejako Posté(e) le 19 novembre 2010 Auteur Partager Posté(e) le 19 novembre 2010 bonne astuce merci . Je voit pas pourquoi utiliser des accolades =°. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.