bash脚本将文件变量读入局部变量

时间:2012-09-05 03:02:18

标签: bash variables file-io

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

msgs.config:

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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]}等来访问变量。或者,如果变量列表是固定的,您可以将值映射到变量:

tmsg="${keys[tmsg]}"

答案 1 :(得分: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]} ...

访问数组变量

答案 2 :(得分:1)

如果您改变主意source

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

如果您的任何值都有双引号,则无效。