我想知道如何设置一个存储其他环境变量的环境变量,但是当我回显时这些环境变量不会扩展,如果我使用eval echo
则它应该扩展。
就像我想要的echo $TEST_HOME
那样/Users/krysto/$PATH/$DATA_DIR
答案1
TEST_HOME
使用单引号创建以防止 bash 扩展:
$ TEST_HOME='/Users/krysto/$MYPATH/$DATA_DIR'
$ echo $TEST_HOME
/Users/krysto/$MYPATH/$DATA_DIR
然后,可以使用 eval 来扩展它。例如:
$ MYPATH=dir1/dir2
$ DATA_DIR=data/dir
$ eval echo $TEST_HOME
/Users/krysto/dir1/dir2/data/dir
几点说明: 惯例是,重要的系统变量(如PATH
或HOME
)全部大写。如果要避免覆盖其中一个变量,请将变量设为小写。特别是,覆盖 PATH 可能会使您所在的 shell 基本无法运行。
答案2
只需转义变量(本地或环境变量没有区别),例如
> test="echo something"
> test1="\$test"
> echo $test1
$test
> eval $test1
something