7

我有一个包含以下内容的配置文件:

味精配置:

tmsg:This is Title Message!
t1msg:This is T1Message.    
t2msg:This is T2Message.    
pmsg:This is personal Message!

我正在编写一个 bash 脚本,它读取 msgs.config 文件变量并将它们存储到局部变量中。我将在整个脚本中使用这些。由于许可,我不想使用该.方法(来源)。

tmsg
t1msg
t2msg
pmsg

任何帮助将不胜感激。

4

3 回答 3

8

您可以使用:

oldIFS="$IFS"
IFS=":"
while read name value
do
    # Check value for sanity?  Name too?
    eval $name="$value"
done < $config_file
IFS="$oldIFS"

或者,您可以使用关联数组:

declare -A keys
oldIFS="$IFS"
IFS=":"
while read name value
do
    keys[$name]="$value"
done < $config_file
IFS="$oldIFS"

现在您可以参考${keys[tmsg]}etc 来访问变量。或者,如果变量列表是固定的,您可以将值映射到变量:

tmsg="${keys[tmsg]}"
于 2012-09-05T05:04:34.227 回答
1

读取文件并存储值-

i=0
config_file="/path/to/msgs.config"

while read line
do
  if [ ! -z "$line" ]  #check if the line is not blank
  then
   key[i]=`echo $line|cut -d':' -f1`  #will extract tmsg from 1st line and so on
   val[i]=`echo $line|cut -d':' -f2`  #will extract "This is Title Message!" from line 1 and so on
   ((i++))
  fi
done < $config_file

访问数组变量为${key[0]}, ${key[1]},.... 和${val[0]}, ${val[1]}...

于 2012-09-05T03:16:42.440 回答
1

如果您改变主意source

source <( sed 's/:\(.*\)/="\1"/' msgs.config )

如果您的任何值有双引号,这将不起作用。

于 2012-09-05T12:03:17.320 回答