shell 用于从 属性 文件的数组中读取 属性 的脚本

shell script to read property in an array from property file

conf.properties 文件的内容如下:

src1=abc
dest1=xyz

src2=123
dest2=456

...

下面的 shell 脚本正在从 conf.properties 文件访问 src 和 dest 属性。

. /tmp/conf.properties

echo "$src1"
echo "$dest1"

echo "$src2"
echo "$dest2"

现在,文件中可以有任意数量的 src 和 dest 属性。

如何编写代码将 属性 文件中的所有 src 和 dest 读取到数组中。

你可以把它们分别读入两个变量中。 逐行读取文件,继续在 srcVal 中附加 src 内容,由 space.

分隔

set -A srcArrVar -- $srcVal set -A destArrVar -- $destVal 或者你可以像下面这样使用 associate arry

typeset -A srcArray
srcArray[src1]="abc"
srcArray[dest1]="xyz"

是的,你需要解析它..我可以立即想到下面的一种方法

grep "src" filename > srcFile
grep "dest" filename > destFile
sort srcFile > sortedSrcFile
sort destFile > sorteddestFile
srcVal=`cut -d"=" -f2 sortedSrcFile`
destVal=`cut -d"=" -f2 sorteddestFile`
set -A srcArrVar -- $srcVal
set -A destArrVar -- $destVal

可以使用 sed/awk 以更优雅的方式完成上述操作...并且我假设您没有缺失值 该系列是连续的 src1、src2... 类似地 dest1、dest2, dest3....

从 Ajay 的回答中获得线索后创建了我自己的逻辑:

filename=/tmp/conf.properties

srcArr=($(grep "src" $filename)) 
destArr=($(grep "dest" $filename))

len=${#srcArr[@]}

for (( i=0; i<${len}; i++ ))
do
    srcVal=$(cut -d"=" -f2 <<< ${srcArr[i]})
    destVal=$(cut -d"=" -f2 <<< ${destArr[i]})

...

done