Bash — арифметика в индексе массива

Скажем, у меня есть массив arr и индекс x. Как присвоить что-то массиву с индексом x+1? Я получаю ошибки, пытаясь сделать следующее, если одна из них верна, я хотел бы знать, какая из них, а если нет, то что я делаю неправильно?

arr[$x+1]="hi"      # Doesn't work
arr[$((x+1))]="hi"  # Nope

person Dori    schedule 24.12.2013    source источник
comment
Оба работают корректно. GNU Баш 4.2.37(1).   -  person Dmitry Alexandrov    schedule 24.12.2013
comment
Ссылки: в руководстве по Bash для начинающих говорится, что индекс массива рассматривается как арифметическое выражение, которое должно быть положительным числом. Арифметические выражения — это все, что может быть внутри $(( )).   -  person cxw    schedule 19.05.2018


Ответы (1)


Почти готово.

arr[(($x+1))]="hi"
person Ignacio Vazquez-Abrams    schedule 24.12.2013
comment
Итак, почему я получаю это: ./win.bash: строка 114: синтаксическая ошибка рядом с неожиданным токеном (' ./win.bash: line 114: let game[(($j+1))]=$tmp' - person Dori; 24.12.2013
comment
Вы не используете bash в качестве интерпретатора. Или вы используете старую версию. - person Ignacio Vazquez-Abrams; 24.12.2013
comment
bash --версия: v 4.1.2(1) - person Dori; 24.12.2013
comment
x не является ни числом, ни переменной. - person Ignacio Vazquez-Abrams; 24.12.2013
comment
x не является переменной? Это мой индекс цикла... for (( x=0; x<total; x+=2 )) А насчет версии, неважно... Я обнаружил, что x пуст, когда ошибка достигнута - person Dori; 24.12.2013
comment
Относительно необходимости разыменования x см. stackoverflow.com/q/40104348/915044 - person TomRoche; 24.06.2019