阵列状的数据结构在bash(配置文件)?(Array like data structure in

2019-08-18 03:04发布

我写了一个bash脚本,它处理多个文件。 我现在想添加一个配置文件的支持。 这是我想要的数据结构:

Array ( 
    [0] => Array (
        [name] => datset1
        [path] => /var/lib/bliTool/ds1
        [type] => cvs
    )

    [1] => Array (
        [name] => datset2
        [path] => /var/lib/bliTool/ds2
        [type] => xml
    )

    [2] => Array (
        [name] => datset3
        [path] => /home/igor/test/ds3
        [type] => cvs
    )
)

Q1是这样的数据结构可以庆典之内? 还有没有其他的建议? 请记住,这应该是在配置文件中...

Q2:我每“设置”想着一个配置文件像

/etc/myApp/
/etc/myApp/myApp.conf
/etc/myApp/datasets.d/
/etc/myApp/datasets.d/ds1.conf
/etc/myApp/datasets.d/ds2.conf
/etc/myApp/datasets.d/dsN.conf

每个/etc/myApp/datasets.d/dsN.conf文件看起来像

name=The DS name
path=/the/path/to/the/ds/files
type=thetype

您有什么推荐的吗? 有没有办法在一个文件中所做的一切?

Q3:我想支持每套多个路径值。 我可以支持像

path="/first/path /second/path"

但是我想我会用空格麻烦了,所以我应该引入像一个分隔符

path="/first/path:/second/path"

拆分字符串。

或者,还有更好的方法?

Answer 1:

你可以在没有嵌套数据strutures bash 。 在最好的情况,你可以关联数组的名称存储在数组中,并通过间接跳火圈来访问它们。

$ declare -A aa0=([name]=dataset1 [path]=/var/lib/bliTool/ds1 [type]=cvs )
$ declare -A aa1=([name]=dataset2 [path]=/var/lib/bliTool/ds2 [type]=xml )
$ declare -A aa2=([name]=dataset3 [path]=/home/igor/test/ds3 [type]=cvs )

$ declare -a array=( aa0 aa1 aa2 )
$ tmp=aa0[name]
$ echo ${!tmp}
dataset1  

对于第二个问题,它肯定可以定义与部分配置文件格式,但你需要写一个分析器,可以处理它。 其他语言通常可用来解析丰富的配置文件格式的库。

至于每个变量作为多个路径,坚持使用: 。 从理论上讲,任何分隔符可以作为一个路径名组件的一部分,因此需要分隔符,如果它是一个路径的一部分被引用。 但由于PATH使用:作为分隔符,有历史的认识到:是不是一个伟大的人物在路径名来使用,而且它需要被引用PATH样的参数。

path="/first/poor\:path\:name:/second/bad\:path\:name"

然后,它会到你的应用程序来处理背削减:



Answer 2:

我到了类似的情况,我的解决方案是不同的级别中使用不同的IFS,它是某种类似chepner的想法。 该代码和样本可以在这里找到https://github.com/pppoe/Nested-Array-Bash/



文章来源: Array like data structure in bash (config file)?