2009-03-16 3 views
3

J'ai une variable d'environnement appelée $TEST qui fait référence à un répertoire dans mon script bash j'ai une variable appelée $VARTEST qui est $TEST/dir/filevariable d'environnement dans les variables

maintenant je veux grep le fichier spécifié par $VARTEST si je tente à faire:
grep somestring $VARTEST mais il ne se traduit pas $TEST dans son répertoire

J'ai essayé différentes combinaisons de {}, "" et '' mais sans succès

Répondre

5

Je pense que vous voulez

eval grep somestring "$VARTEST" 

ou même

VARTEST_EVALUATED=$(eval echo $VARTEST) 
grep "$SOMESTRING" "$VARTEST_EVALUATED" 

mais rappelez-vous (comme d'autres déjà dit): Si possible, utilisez

VARTEST="$TEST/foo/bar" 

au lieu de

VARTEST='$TEST/foo/bar' 

utiliser la seconde que si vous avez vraiment besoin genre de « évaluation paresseuse » ...

Attention, cela pourrait être dangereux si $VARTEST contient du code malicous.

+0

qui a fait l'affaire, mais un nouveau problème refait surface, somestring dans mon cas est une variable qui contient un espace; $ SomeString = « quelque chose » Recherches maintenant grep pour certains et utilise chose comme filename, ie les "" sont perdus – Richo

+0

Ugly, mais utilisez eval grep "\" $ SOMESTRING \ "" "$ VARTEST" –

1

Avez-vous mis des guillemets simples autour de quelque chose? Les guillemets simples empêcheront la traduction des variables en leurs valeurs correspondantes. Les guillemets doubles fonctionneront bien. Par exemple:

#!/bin/sh 

TEST="/etc" 
VARTEST="$TEST/passwd" 
grep "$LOGNAME" "$VARTEST" 
Questions connexes