4

我有一个名为的环境变量$TEST,它引用我的 bash 脚本中的一个目录我有一个名为的变量$VARTEST,它是 $TEST/dir/file

现在我想 grep 指定的文件,$VARTEST所以我尝试这样做:
grep somestring $VARTEST但它不会转换$TEST为它的目录

我尝试了 , 的不同组合,{}但没有成功""''

4

2 回答 2

6

我想你想要

eval grep somestring "$VARTEST"

甚至

VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"

但请记住(正如其他人已经说过的):如果可能,请使用

VARTEST="$TEST/foo/bar"

代替

VARTEST='$TEST/foo/bar'

仅当您确实需要某种“惰性评估”时才使用第二个...

警告,如果$VARTEST包含恶意代码,这可能会很危险。

于 2009-03-16T17:10:01.127 回答
1

你有没有在某事周围加上单引号?单引号将阻止变量被翻译成它们对应的值。双引号会起作用。例如:

#!/bin/sh

TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"
于 2009-03-16T17:15:28.493 回答