Environment variable within variable
-
19-08-2019 - |
Question
I have an environment variable called $TEST
which refers to a directory
in my bash script I have a variable called $VARTEST
which is $TEST/dir/file
now I want to grep the file specified by $VARTEST
so I try to do:
grep somestring $VARTEST
but it doesn't translate $TEST
into it's directory
I've tried different combinations of {}
, ""
and ''
but without success
Solution
I think you want
eval grep somestring "$VARTEST"
or even
VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"
but remember (as others already said): If possible use
VARTEST="$TEST/foo/bar"
instead of
VARTEST='$TEST/foo/bar'
use the second one only if you really need kind of 'lazy evaluation'...
Warning, this could be dangerous if $VARTEST
contains malicous code.
OTHER TIPS
Have you put single quotes around something? Single quotes will prevent the variables from being translated into their corresponding values. Double quotes will work though. For example:
#!/bin/sh
TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"