Есть отдельная тема по аргументам. А эта тема отдельная. Напрямую связанная с yq и передача данных в баш функцию так, чтобы было удобно с этим всем работать. Зачем? Разные функции будут обрабатывать разный «dataset». Количество данных разное и объемное. Вручную создавать переменные внутри функции - не очень практично. Лучше это сделать автоматизированно
cat ./example1
- some1: "value1"
some2: val2
some3: val3
source_data() {
local path="${1}"
shift 1
cat<<EOF
$(cat "${path}")
EOF
}
f1() {
# формируем список локальных переменных, имена которых являются
# именами ключей передаваемого "dataset" с помощью цикла
# т.е происходит иммитация
# local some1="value1"
# local some2=val2
# local some3=val3
# чтобы можно было работать с аргументами по именам
echo
}
parse() {
local target="${1}"
shift 1
if [[ ! -f "${target}" ]]; then
printf "${COLOR_RED}Error: cannot load ${target}\n"
fi
local data=$(printf "%s %s" source_data ${target})
local i=0
while ${data} | yq ".[$i]" -e > /dev/null 2>&1; do
local x="$(${data} | yq ".[$i]")"
echo ${x}
# f1(x) # <-- передаем "dataset" в функцию
((i++))
done
}
parse "./example1.yml"