40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
# zini function to parse INI files and store their content in an associative array
|
|
zini() {
|
|
local ini_path="$1"
|
|
typeset -gA config
|
|
|
|
# Check if the file exists
|
|
if [[ ! -f "$ini_path" ]]; then
|
|
echo "Configuration file not found: $ini_path"
|
|
return 1
|
|
fi
|
|
|
|
local current_section=""
|
|
local line key value composite_key
|
|
|
|
# Read the INI file line by line
|
|
while IFS= read -r line || [[ -n $line ]]; do
|
|
line=$(echo $line | xargs) # Trim whitespace
|
|
|
|
# Skip empty lines and comments
|
|
[[ -z "$line" || "$line" == \;* ]] && continue
|
|
|
|
# Detect section headers
|
|
if [[ "$line" == \[*\]* ]]; then
|
|
current_section="${line:1:-1}"
|
|
else
|
|
# Parse key-value pairs
|
|
key=${line%%=*}
|
|
value=${line#*=}
|
|
key=$(echo $key | xargs) # Trim key
|
|
value=$(echo $value | xargs) # Trim value
|
|
|
|
# Store in associative array with 'section_key' format
|
|
composite_key="${current_section}_${key}"
|
|
config[$composite_key]="$value"
|
|
fi
|
|
done < "$ini_path"
|
|
|
|
# echo "Configuration loaded."
|
|
}
|