大佬教程收集整理的这篇文章主要介绍了linux – 使用’.’的Bash脚本属性文件在变量名称中,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是bash脚本的新手,对于在bash脚本中使用.properties文件中的属性有疑问.
this.prop.one=someProperty
echo ${this.prop.one}
./test.sh: line 5: ${this.prop.one}: bad substitution
如果我没有’,’我可以使用属性.在变量名中,并包含props文件:
#!/bin/bash
. test.properties
echo ${this_prop_one}
我真的希望能够使用’.’在变量名中,如果可能的话,不必包含.脚本中的test.properties.
这可能吗?
更新:
谢谢你的回答!那么,这很奇怪.我正在使用一个看起来像这样的bash脚本(glassfish服务):
#!/bin/bash
start() {
sudo ${glassfish.home.dir}/bin/asadmin start-domain domain1
}
...
…还有像这样的属性文件(build.properties):
# glassfish
glassfish.version=2.1
glassfish.home.dir=${app.install.dir}/${glassfish.target}
...
declare -A props
while read -r; do
[[ $REPLY = *=* ]] || continue
props[${REPLY%%=*}]=${REPLY#*=}
done
…之后您可以像这样访问它们:
echo "${props[this.prop.name]}"
如果你想以递归的方式查找引用,那么它会变得更有趣.
getProp__property_re='[$][{]([[:alnum:].]+)[}]'
getProp() {
declare -A seen=( ) # to prevent endless recursion
declare propName=$1
declare value=${props[$propName]}
while [[ $value =~ $getProp__property_re ]]; do
nestedProp=${BASH_REMATCH[1]}
if [[ ${seen[$nestedProp]} ]]; then
echo "ERROR: Recursive deFinition encountered looking up $propName" >&2
return 1
fi
value=${value//${BASH_REMATCH[0]}/${props[$nestedProp]}}
done
printf '%s\n' "$value"
}
如果我们有如下定义的道具(你也可以通过使用适当的input-file.properties在这个答案的顶部运行循环来获得):
declare -A props=(
[glassfish.home.dir]='${app.install.dir}/${glassfish.target}'
[app.install.dir]=/install
[glassfish.target]=target
)
……然后行为如下:
bash4-4.4$getProp glassfish.home.dir
/install/target
以上是大佬教程为你收集整理的linux – 使用’.’的Bash脚本属性文件在变量名称中全部内容,希望文章能够帮你解决linux – 使用’.’的Bash脚本属性文件在变量名称中所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。