7

次の内容の構成ファイルがあります。

msgs.config:

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

msgs.configファイル変数を読み取り、それらをローカル変数に格納するbashスクリプトを作成しています。スクリプト全体でこれらを使用します。.許可を得て、メソッド(ソース)を使用したくありません。

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 に答える