Несмотря на то, что на вопрос дан ответ, и он довольно старый, я хотел бы поделиться решением для пространства имен, поскольку оно работает значительно быстрее, чем любые другие способы, кроме ответа ennukiller (в моих тестах по 100 тыс. Строк он выиграл ~ 12 секунд против моих ~ 14 секунд, тогда как решение с добавлением списка заняло бы несколько минут).
Вы можете использовать следующий трюк:
# WORKS FASTER THAN THESE LAME LISTS! ! !
size=0;while IFS= read -r line; do
echo $line
((++size))
eval "SWAMP_$size='$line'"
done
Или вы можете сделать следующее:
#!/bin/bash
size=0
namespace="SWAMP"
ArrayAppend() {
namespace="$1"
# suppose array size is global
new_value="$2"
eval "${namespace}_$size='$2'"
eval "echo \$${namespace}_$size"
((++size))
}
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
Пока интерпретатор находится в списке тегов, вот ссылка на объектно-ориентированный bash .