Variable de entorno dentro de variable
-
19-08-2019 - |
Pregunta
Tengo una variable de entorno llamada $ TEST
que se refiere a un directorio
en mi script bash tengo una variable llamada $ VARTEST
que es $TEST/dir/file
ahora quiero grep el archivo especificado por $ VARTEST
, así que trato de hacer:
grep somestring $ VARTEST
pero no traduce $ TEST
en su directorio
He probado diferentes combinaciones de {}
, " "
y ''
pero sin éxito
Solución
Creo que quieres
eval grep somestring "$VARTEST"
o incluso
VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"
pero recuerde (como ya han dicho otros): si es posible, use
VARTEST="$TEST/foo/bar"
en lugar de
VARTEST='$TEST/foo/bar'
use el segundo solo si realmente necesita una especie de 'evaluación perezosa' ...
Advertencia, esto podría ser peligroso si $ VARTEST
contiene código malicioso.
Otros consejos
¿Has puesto comillas simples alrededor de algo? Las comillas simples evitarán que las variables se traduzcan a sus valores correspondientes. Sin embargo, las comillas dobles funcionarán. Por ejemplo:
#!/bin/sh
TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"