Не могу прочитать хэш-массив вне цикла в bash

Не удается получить доступ к значению хеш-массива, назначенному в цикле for вне его.

declare -A numbers

for((i=0;i<5;i++)){
    randNum=$RANDOM
    numbers[i]=$randNum
    echo ${numbers[i]}
}   
echo ${numbers[0]}

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

весь скрипт пожалуйста. (с декларациями)

Anuj Vishwakarma 07.04.2019 19:29

Обратите внимание, что вы используете недокументированный альтернативный синтаксис для цикла for. Отдайте предпочтение for ((...)); do ...; done.

chepner 07.04.2019 19:33

число != числа

Cyrus 07.04.2019 19:34

Для меня это работает, попробуйте поменять местами % на $ для генерации случайного числа

Anuj Vishwakarma 07.04.2019 19:43

Замените оба [i] на [$i].

Cyrus 07.04.2019 19:45

Вы уверены, что хотите использовать -A, а не -a?

Cyrus 07.04.2019 19:46
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
6
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Несколько изменений в вашем сценарии сделают

#!/bin/bash
declare -a numbers # once numbers everywhere numbers
# Thanks @cyrus for the comment above, well you need an indexed array,
# not an associative one.
for((i=0;i<5;i++))
do # do-done is the preferred syntax
    randNum=${RANDOM} # %RANDOM% is Windows command line stuff 
    # alternatively you could use  a range say ${RANDOM:0:2}
    # for values between 10^0 and 10^2, and so
    echo $randNum
    numbers[i]=$randNum
    echo ${numbers[i]}
done
echo "After loop"
echo ${numbers[0]} # Should work

В синтаксисе {} с for-loop прочитайте ответ это.

Другие вопросы по теме