Bash - 如何将文件内容读入变量,该文件是从key->值属性文件中读取的?

时间:2014-03-13 17:38:03

标签: bash shell

我有一个key->值属性文件(my.prop),其中包含以下内容:

ROOT_PATH = /opt/user1/
REL_PATH = data/folder1/
CONF_FILENAME = my.conf

在我的bash脚本中,我只需阅读此文件,如下所示:

#!/bin/bash
PROP_FILE='my.prop'
ROOT_PATH =''
REL_PATH=''
CONF_FILENAME=''

while read -r key eq value; do
    case $key in
      "ROOT_PATH") 
        ROOT_PATH=${value}
      ;;
    case $key in
      "REL_PATH") 
        REL_PATH=${value}
      ;;
    case $key in
      "CONF_FILENAME") 
        CONF_FILENAME=${value}
      ;;
    esac
done < $PROP_FILE

之后我想形成 my.conf 文件的路径并将其内容读取到某个变量,如下所示:

CONF_FULL_PATH=$ROOT_PATH$REL_PATH$CONF_FILENAME
CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`

如果我打印出CONF_FULL_PATH变量,它将会有一些垃圾(所有三个子路径的一部分)。 在这一行CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`我将收到此错误消息 - :没有这样的文件或目录/ folder1 /

所以,我的问题是,我怎样才能正确地形成 my.conf 文件的路径并将其内容放到某个特定的变量中?我已经尝试source命令作为while循环的替代。另外,为了构建一个正确的路径字符串,我使用了以下语句: $(dirname $ROOT_PATH)/$(dirname REL_PATH)/$(basename $CONF_FILENAME)但这看起来很奇怪。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

如果从my.prop文件中删除空格,则可以使用source(或.)来读取其中的变量。这将使它更容易。

my.prop:

ROOT_PATH=/opt/user1/
REL_PATH=data/folder1/
CONF_FILENAME=my.conf

然后您可以直接在脚本中使用这些:

#!/bin/bash
. my.prop
CONF_FULL_PATH="${ROOT_PATH}${REL_PATH}${CONF_FILENAME}"
CONF_FILE_CONTENT=$(cat "$CONF_FULL_PATH")