Variable d'environnement dans variable
-
19-08-2019 - |
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
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"