我想创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