Posté(e) le 13 novembre 201014 a ######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.
Posté(e) le 17 novembre 201014 a Auteur ##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.
Posté(e) le 17 novembre 201014 a 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
Posté(e) le 19 novembre 201014 a Auteur bonne astuce merci . Je voit pas pourquoi utiliser des accolades =°.
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.