首页 > 解决方案 > 如何在 UNIX shell 脚本中引用通用脚本中的变量和文件中的变量名

问题描述

我有一个配置文件,其中包含如下变量名:

config.txt

ABC

XYZ

并且这些变量的值在另一个脚本中,如下所示:

basescript.sh

xyz="Hi"

ABC="Hello"

我想从配置文件中获取变量名并引用该脚本中的变量并获取值。

我试过这个:

mainscript.sh

. /basescript.sh

ABC=`head -1 config.txt`;
echo $ABC

我得到的结果ABC不是价值。

谁可以帮我这个事?

标签: shellunix

解决方案


. /basescript.sh将在执行时的环境中创建该文件中包含的所有 shell 变量mainscript.sh

您可以使用间接扩展访问变量的值${!varname}。这是一个例子:

[mhawke@localhost ~]$ ABC=123
[mhawke@localhost ~]$ echo $ABC
123
[mhawke@localhost ~]$ varname=ABC
[mhawke@localhost ~]$ echo ${!varname}
123

将其应用于您的脚本,您可以迭代其中的变量名称config.txt并使用变量名称的值显示它们的值$varname

. ./basescript.sh

for varname in `cat config.txt`
do
    if [[ ${!varname} ]]    # if variable is set and has a value
    then
        echo "Variable name: $varname has value '${!varname}'"
    fi
done

输出:

变量名:ABC 的值为 'Hello'

推荐阅读