LINUX.ORG.RU

bash, рекурсивное задание массива

 , ,


0

2

Можно ли при таком задании массива сослаться на ранее опеделённый элемент?

declare -A arr=(  \
    [a]=foo       \
    [b]=${arr[a]} \
    )
echo ${arr[b]} # => '' ;-(

Кажется, что пример как бы намекает, но вдруг существует какой-то способ.

★★

Последнее исправление: Evenik (всего исправлений: 2)

Нихрена не знаю баш, но есть подозрение, что он сначала вычисляет все аргументы, а только потом складывает их в массив. Поэтому ответ - нет, не можно.

hippi90 ★★★★★
()
Ответ на: комментарий от SpaceRanger

щас бы в 2к23 программировать на баше.

Ну, что-то серьезное - конечно нет. А какие-нибудь wrapper-ы вокруг всяких CLI-утилит - вполне. Очень даже подходящий скриптовый язык именно для таких целей.

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Можно просто вот так:

Похоже сделано сейчас, но без массивов (обход элементов не требуетя):

x_a=foo
x_b=$x_a/bar
x_c=...
...
y_a=...
y_b=...
...
z_z=...

Применив массивы хотелось улучшить читаемость, но выходит шило на мыло.

Evenik ★★
() автор топика
Ответ на: комментарий от Evenik

Применив массивы хотелось улучшить читаемость …

Массивы нужны и полезны (в том числе и в плане читабельности), когда значения индексов фигурируют и передаются в коде в виде переменных. Иногда массив удобен в качестве выходной переменной, когда функции нужно вернуть несколько выходных значений.

vinvlad ★★
()
Последнее исправление: vinvlad (всего исправлений: 1)
Ответ на: комментарий от vinvlad

Массивы нужны и полезны ...

Верно, а также они нужны, когда требуется обход элементов. Но плохо ли использовать массивы только для организации пространств имён? Как видно, это освобождает от повторения одинаковых префиксов при инициализации. (К сожалению, в данном случае не вполне...)

Evenik ★★
() автор топика