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

Was it helpful?

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"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top