YAML и TOML - популярные форматы конфигураций. Но в чистом bash их разбирать - задача нетривиальная. Особенно если не хочешь тащить yq, shyaml, python и toml-cli.
Разберемся, как выжать максимум из awk, grep, IFS и других стандартных средств.
▪️ YAML (только простые key: value)
parse_yaml() {
grep '^[^#[:space:]].*:' "$1" | awk -F': ' '
NF == 2 { gsub(/"/, "", $2); print $1 "=" $2 }
'
}
Пример:
# config.yaml
port: 8080
host: localhost
debug: true
Вызов:
eval $(parse_yaml config.yaml)
echo "$host:$port" # → localhost:8080
Не поддерживает вложенные уровни и массивы - только flat YAML.
▪️ TOML (ключ=значение)
parse_toml() {
grep -v '^\s*#' "$1" | grep '=' | while IFS='=' read -r key val; do
key=$(echo "$key" | xargs)
val=$(echo "$val" | sed -E 's/^["'\'']//; s/["'\'']$//' | xargs)
echo "$key=$val"
done
}
Пример:
# config.toml
user = "admin"
port = 9000
Вызов:
eval $(parse_toml config.toml)
echo "$user:$port" # → admin:9000
🟩 Преимущества
📍 Легко встраивается в скрипты
📍 Не требует ничего, кроме POSIX-инструментов
📍 Можно логировать значения или сохранять в массивы
🔲 Ограничения
📍 Нет поддержки массивов, вложенных таблиц, якорей
📍 YAML с отступами, списками и вложениями - не обработается
BashTex 📱 #bash