Как использовать массив строк в bash

Эти сообщения обычно возникают из-за сбоев во время загрузка списка или глюк в зеркале. Вы можете исправить это, удалив неверные списки:

$ sudo rm /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_saucy_universe_binary-amd64_Package

и обновив с помощью sudo apt-get update . Если это все же произойдет, используйте другое зеркало или сначала немного подождите.

1
01.11.2018, 19:30
1 ответ

Посмотрите, что происходит с массивом при его инициализации:

$ i=0; for k in a b c d; do A[$k]=$((i++)); done; declare -p A
declare -a A=([0]="3")

Присутствует только один элемент, и он имеет нулевой индекс.

По умолчанию массивы индексируются числами , и все числовые значения индексов, которые вы использовали, равны нулю. На самом деле, в арифметическом контексте, подобно индексу обычного массива, строка принимается как имя переменной, и используется значение этой переменной. Итак, если мы присвоим a, b... числам, то получим что-то другое:

$ a=123; b=456; c=789; d=999; i=0;
$ for k in a b c d; do A[$k]=$((i++)); done;
$ declare -p A
declare -a A=([123]="0" [456]="1" [789]="2" [999]="3")

Чтобы на самом деле использовать сами строки в качестве индексов, сначала объявите массив как ассоциативный массив с помощью declare -A arraynameилиtypeset -A arrayname:

$ unset A; declare -A A; i=0;
$ for k in a b c d; do A[$k]=$((i++)); done; declare -p A
declare -A A=([a]="0" [b]="1" [c]="2" [d]="3" )
6
27.01.2020, 23:11

Теги

Похожие вопросы