一尘不染

如何使用Shell脚本读取包含带有句点字符的键的.properties文件

linux

我正在尝试从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中的某个位置


阅读 304

收藏
2020-06-03

共1个答案

一尘不染

由于(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_')
2020-06-03