Richo
Richo

Reputation: 761

Environment variable within variable

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

Upvotes: 4

Views: 5918

Answers (2)

Johannes Weiss
Johannes Weiss

Reputation: 54111

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.

Upvotes: 6

Ryan Bright
Ryan Bright

Reputation: 3565

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"

Upvotes: 1

Related Questions