简体   繁体   中英

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

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.

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"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM