Como eu adiciono um array associativo a uma variável de um arquivo ini externo?

1

Estou modificando um script simples para adicionar função e aprender mais sobre como escrever scripts bash. Atualmente, o script cria matrizes associativas usando uma função:

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

Agora eu gostaria que ele lesse um arquivo ini para as variáveis. No entanto, a documentação que conheci instrui como criar o arquivo, mas usa apenas matrizes simples para exemplos. Como eu crio os arrays usando um arquivo de dados que se parece com o seguinte para fazer um array associativo:

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

[site2]
shortcut=x2
site=example2.com
theme=beta
    
por dimmech 11.08.2014 / 16:27

1 resposta

2

Você pode fazer isso:

#!/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

Teste a saída com echo "$@" adicionado na função:

x1 example1.com alpha
x2 example2.com beta
    
por 11.08.2014 / 16:42

Tags