shell - 如何在 UNIX shell 脚本中引用通用脚本中的变量和文件中的变量名
问题描述
我有一个配置文件,其中包含如下变量名:
config.txt
:
ABC
XYZ
并且这些变量的值在另一个脚本中,如下所示:
basescript.sh
:
xyz="Hi"
ABC="Hello"
我想从配置文件中获取变量名并引用该脚本中的变量并获取值。
我试过这个:
mainscript.sh
. /basescript.sh
ABC=`head -1 config.txt`;
echo $ABC
我得到的结果ABC
不是价值。
谁可以帮我这个事?
解决方案
. /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'
推荐阅读
- html - 如何以良好的格式将数据放入html中
- javascript - 当我进行正确设置时会显示错误。“SessionNotCreatedError:未创建会话:Chrome 版本必须介于 70 和 73 之间”
- glsl - 对于 webgl/glsl 中的 (x> 0. && x<= 0.),x 的什么值会评估为真?
- c++ - 两点之间半径的圆弧
- python - PIL:IOError:[Errno 13] 权限被拒绝:[picturename.jpg]
- python - 如何允许用户在类中输入他/她想要的参数?
- windows - 即使启用了 docker 中的虚拟化未启用错误
- ios - itms 或 itms-apps 链接不再打开 AppStore?
- python - Django Rest Framework - 嵌套序列化不嵌套
- jquery - 如何删除剃须刀 ASP.NET MVC 5 上的先前数据列表?