Есть отдельная тема по аргументам. А эта тема отдельная. Напрямую связанная с 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"






