如何从外部ini文件向变量添加关联数组?


1

我正在修改一个简单的脚本以添加功能,并详细了解如何编写bash脚本。当前,该脚本使用以下函数创建关联数组:

declare -A site theme
add_site() {
    local shortcut=$1
    site[$shortcut]=$2
    theme[$shortcut]=$3
}
add_site x1 example1.com alpha
add_site x2 example2.com beta

现在,我希望它读取变量的ini文件。但是,我遇到的所有文档都说明了如何获取文件,但是仅使用单个数组作为示例。如何使用类似于以下内容的数据文件创建数组以创建关联数组:

[site1]
shortcut=x1
site=example1.com
theme=alpha

[site2]
shortcut=x2
site=example2.com
theme=beta

Answers:


2

你可以这样做:

#!/bin/bash

declare -A site=() theme=()

add_site() {
    local shortcut=$1
    site[$shortcut]=$2
    theme[$shortcut]=$3
}

while IFS= read -r line; do
    case "$line" in
    shortcut=*)
        # IFS== read -r __ shortcut <<< "$line"
        _shortcut=${line#*=}
        ;;
    site=*)
        # IFS== read -r __ site <<< "$line"
        _site=${line#*=}
        ;;
    theme=*)
        # IFS== read -r __ theme <<< "$line"
        _theme=${line#*=}
        add_site "$_shortcut" "$_site" "$_theme"
        ;;
    esac
done < file.ini

测试输出加上echo "$@"功能:

x1 example1.com alpha
x2 example2.com beta

当我测试输出时,我只会得到第一组变量。使用for循环进行迭代,我可以在站点数组中看到第二个键的值为零。
dimmech

@ user1074170我使用了与数组变量名称相同的本地名称,抱歉。我做了更新。
konsolebox 2014年

我再也看不到零值键了,但似乎只存储了第一组值。
dimmech

@ user1074170在我的测试中效果很好。您可以显示调试输出吗?(bash -x script.sh
konsolebox 2014年

1
不,这不是默认设置,但确实可行!谢谢你
dimmech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.