Вы можете использовать подоболочку с циклом for, который зацикливается на ваших массивах и создает правильные аргументы.
command mycommand /path/location $(for ((i=0; i<"${#value[@]}"; i++)) do printf "%s=%s " "${arg[$i]}" "${value[$i]}"; done)
Как я и обещал в комментариях, это будет работать, даже если в значениях есть пробелы.
Здесь я создаю аргументы динамически и разделяю аргументы на нулевые символы (\ 0).
Я отправляю их по электронной почте xargs. xargs - это своего рода анализатор аргументов и, вероятно, лучший выбор для этой работы.
Таким образом, вместо того, чтобы позволить bash передавать аргумент (который передает их, разбивая их на пустое пространство), мы позволяем xargs передавать аргумент и иметь полный контроль над тем, как они разбиваются.
В этом случае я выбираю разделение на нулевые символы (путем установки -0), чтобы все остальные символы (пробелы или даже разрывы строк) не мешали передаче аргументов.
for ((i=0; i<"${#value[@]}"; i++)) do printf "%s=%s\0" "${arg[$i]}" "${value[$i]}"; done |
xargs -0 command mycommand /path/location