我有一个包含以下内容的配置文件:
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
非常感谢任何帮助。
答案 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 )
如果您的任何值都有双引号,则无效。