Ответ 1
Использовать расширение параметра:
array=("${array[@]/#/^}")
Из документации:
${параметр/шаблон/строка}
Замена шаблонов. Шаблон расширяется, чтобы создать шаблон так же, как в pathname расширение. Параметр расширен и наибольшее совпадение шаблона с его значением заменен на строку. Если шаблон начинается с /, все совпадения шаблона заменяются на строка. Обычно заменяется только первое совпадение. Если шаблон начинается С#, он должен совпадение в начале расширенного значения параметра. Если шаблон начинается с%, это должен совпадать в конце расширенного значения параметра. Если строка равна null, совпадения шаблон удаляется, и шаблон/следующий шаблон может быть опущен. Если параметр равен @или *, операция замещения применяется в каждом позиционном параметре по очереди, а расширение - это результирующий список. Если параметр является переменной массива, подстроенной с помощью @или *, операция замены применяется к каждому члену массива поочередно, а расширение результирующий список.