J'ai une variable dont la valeur que je veux passer dans une commande. Cependant, le $ produit des résultats inhabituels. Il semble agir comme un * et rechercher tous les répertoires. Mon code est:valeur de passage bash en commande
"Please enter the test type: "
read test
result="pass"
search_result=`find ./logs/$test_2017_01_logs*/* -type f -name func_log -exec egrep $result {} \;`
echo "$search_result"
Je veux seulement rechercher le suffixe de répertoire qui a été lu par l'utilisateur, et non pas tous les répertoires qui est ce que fait mon code.
est la question en raison de la concaténation du passé en valeur ($ test) et le reste du nom du dossier (_2017_01_logs *)?
pouvez également ajouter des guillemets autour '$ result', de sorte qu'il ne soit pas divisé par mot (avec les mots au-delà du premier interprétés comme des noms de fichiers supplémentaires). –
Je suggère également '-exec egrep -h -e "$ result"/ dev/null {} +' - Nous ne courons pas 'grep' fois plus que nous avons besoin, et (en raison de la précédant '-e') interprète' result' comme une chaîne littérale même si elle commence par un tiret. (Le '-h' supprime les noms de fichier en sortie, pour obtenir un comportement équivalent à l'utilisation courante même lorsque plusieurs noms sont passés, si vous les voulez, retirez-le). –
... le '/ dev/null' est là parce que' grep' change son comportement dans certains cas en fonction du nombre de noms de fichiers transmis; le fait d'être présent assure que vous obtenez un comportement cohérent, quel que soit le nombre de résultats que 'find' ajoute à la ligne de commande, et signifie que si l'idiome est réutilisé avec' xargs', nous n'obtenons pas une instance de stdin avec une implémentation cela fait suite à l'invocation dans le cas 0-results-found (IIRC, l'implémentation de MacOS en fait partie). –