我想创建一个名称部分动态的变量,并从我的bash shell脚本中导出它.我一直试图通过以下方式来做到这一点.虽然没有成功.请告诉我我错在哪里.
#!/bin/bash
CURRENT_PROCESS_ID=$$
var=METASTORE_JDBC_DRIVER_$CURRENT_PROCESS_ID
echo $var
export $var='1'
Run Code Online (Sandbox Code Playgroud)
执行命令
bash <filename>.sh
Run Code Online (Sandbox Code Playgroud)
我希望脚本会创建一个环境变量METASTORE_JDBC_DRIVER_8769,我应该能够在脚本echo $METASTORE_JDBC_DRIVER_8769之外使用它,但是当我在脚本之外做时
,不会给我任何东西.欢迎任何建议/想法.
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
Run Code Online (Sandbox Code Playgroud)
有关详细信息和示例,请参阅http://tldp.org/LDP/abs/html/bashver2.html#EX78
有关使用更为人熟知的eval var1=\$$var2技术的详细信息和示例,请参阅http://tldp.org/LDP/abs/html/ivr.html
将导出导出到当前shell上下文中.通过使用bash运行脚本,它将在shell的上下文中设置.您需要获取文件以使其在当前shell上下文中运行.
source <filename>.sh
Run Code Online (Sandbox Code Playgroud)
只是为了显示子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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10304 次 |
| 最近记录: |