Question

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 / rép / fichier

maintenant je veux grep le fichier spécifié par $ VARTEST alors j'essaie de le faire:
grep somestring $ VARTEST mais il ne traduit pas $ TEST dans son répertoire

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

Était-ce utile?

La solution

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 l'ont déjà dit): si possible, utilisez

VARTEST="$TEST/foo/bar"

au lieu de

VARTEST='$TEST/foo/bar'

utilisez le second uniquement si vous avez vraiment besoin d'une "évaluation paresseuse" ...

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

Autres conseils

Avez-vous mis des guillemets simples autour de quelque chose? Les guillemets simples empêcheront les variables d'être traduites dans leurs valeurs correspondantes. Les guillemets doubles fonctionneront bien. Par exemple:

#!/bin/sh

TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top