Проблема в том, что вы не объявляете свой массив ассоциативным, поэтому предполагается, что это числовой массив. Когда Баш пытается оценить
my_array[$foo]=bar
, что он приходит в это
my_array[foo]=bar
но индекс массива не все еще числовые, поэтому он пытается оценить его снова, приводя в
my_array[foo]=bar
, так как вам не нужно использовать $, находясь между квадратными скобками. Вы можете видеть, что это продолжается и продолжается до тех пор, пока не будет превышено превышение уровня рекурсии.
Чтобы решить эту проблему, просто объявить массив как ассоциативно:
declare -A my_array
Спасибо, это решило проблему. Но почему тогда возникает второй пример в моем вопросе? –
Я предполагаю, что когда bash оценивает 'my_array [$ foo] = bar' и расширяет его в' my_array [hello] = bar', то он пытается снова оценить его, но не находит соответствия для $ hello, поэтому предполагает, что он быть литеральной строкой и, таким образом, останавливать оценку, рассматривая массив как ассоциативный. – Win32
@ Win32: Я полагаю, что assings 'bar' до $ {my_array [0]}, он не превращает массив в ассоциативный. – choroba