我想创建一个名称部分动态的变量,并从我的bash shell脚本中导出它。我一直试图通过以下方式来做到这一点。虽然没有成功。请告诉我我错在哪里。
#!/bin/bash
CURRENT_PROCESS_ID=$$
var=METASTORE_JDBC_DRIVER_$CURRENT_PROCESS_ID
echo $var
export $var='1'
执行命令
bash <filename>.sh
我希望脚本会创建一个像METASTORE_JDBC_DRIVER_8769
这样的环境变量,我应该能够在剧本中使用它,但是当我做的时候
脚本外的echo $METASTORE_JDBC_DRIVER_8769
不会给我任何东西。欢迎任何建议/想法。
答案 0 :(得分:8)
Bash版本2为动态创建的变量名称(a.k.a“间接引用”)引入了更直观的表示法${!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
答案 1 :(得分:6)
将导出导出到当前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