在bash shell脚本中使用dynamic创build的名称导出variables

我想创build一个名称部分dynamic的variables,并从我的bash shell脚本中导出它。 我一直在试图做到这一点, 虽然没有成功。 请告诉我我错在哪里。

#!/bin/bash CURRENT_PROCESS_ID=$$ var=METASTORE_JDBC_DRIVER_$CURRENT_PROCESS_ID echo $var export $var='1' 

执行命令

 bash <filename>.sh 

我希望脚本会创build一个像METASTORE_JDBC_DRIVER_8769这样的环境variables,我应该能够使用脚本,但是当我在脚本之外echo $METASTORE_JDBC_DRIVER_8769 ,不会给我任何东西。 任何build议/想法都欢迎。

将导出变量导出到当前的shell上下文中。 通过使用bash运行你的脚本,它被设置在shell的上下文中。 您需要获取文件以使其在当前shell环境中运行。

 source <filename>.sh 

只是为了显示一个子shell和源之间的区别:

 [nedwidek@yule ~]# bash test.sh METASTORE_JDBC_DRIVER_8422 [nedwidek@yule ~]# env |grep META [nedwidek@yule ~]# source test.sh METASTORE_JDBC_DRIVER_8143 [nedwidek@yule ~]# env |grep META METASTORE_JDBC_DRIVER_8143=1 

Bash版本2为动态创建的变量名称(又称“间接引用”)引入了更为直观的​​符号${!var}

 a=letter_of_alphabet letter_of_alphabet=z echo "a = $a" # Direct reference. echo "Now a = ${!a}" # Indirect reference. (a = z) # The ${!variable} notation is more intuitive than the old #+ eval var1=\$$var2 

有关详细信息和示例,请参阅http://tldp.org/LDP/abs/html/bashver2.html#EX78

有关使用更广为人知的eval var1=\$$var2技术的详细信息和示例,请参阅http://tldp.org/LDP/abs/html/ivr.html