我正在尝试从shell脚本读取属性文件,该脚本包含一个句点(。)字符,如下所示:
# app.properties db.uat.user=saple user db.uat.passwd=secret #/bin/sh function pause(){ read -p "$*" } file="./app.properties" if [ -f "$file" ] then echo "$file found." . $file echo "User Id " $db.uat.user echo "user password =" $db.uat.passwd else echo "$file not found." fi
我尝试在获取文件后解析文件,但由于键包含“。”,因此无法正常工作。字符,并且该值中也有空格。
我的属性文件始终位于脚本的同一目录中或/ usr / share / doc中的某个位置
由于(Bourne)Shell变量不能包含点,因此可以用下划线替换它们。阅读每一行,翻译。在_和评估的关键。
#/bin/sh file="./app.properties" if [ -f "$file" ] then echo "$file found." while IFS='=' read -r key value do key=$(echo $key | tr '.' '_') eval ${key}=\${value} done < "$file" echo "User Id = " ${db_uat_user} echo "user password = " ${db_uat_passwd} else echo "$file not found." fi
请注意,以上仅翻译。到_,如果您使用更复杂的格式,则可能需要使用其他翻译。最近,我不得不解析一个包含许多讨厌字符的完整Ant属性文件,在那我必须使用:
key=$(echo $key | tr .-/ _ | tr -cd 'A-Za-z0-9_')