существует ли способ перечислить все 'индексные идентификаторы' (ключи) на переменной ассоциативного массива удара?

Командная строка Вы говорите это, появляется, как одиночный пробел появляется как 8 пробелов здесь, не вкладка (но возможно это - StackExchange).

Отладка этого может быть немного хитрой. Существует несколько вещей, которые могут или не могут "приготовить" вкладки: терминал, при вставке символа; оболочка, при обработке входа; базовый терминальный режим (режим с обработкой по сравнению с режимом без предварительной обработки), и, в конце, само диалоговое окно.

Для создания вещей еще более сбивающими с толку при использовании эха для генерации вкладки, или если Вы так или иначе еще генерируете вкладку, существует все еще шанс, эмулятор терминала решает промыть это прочь.

Обычно замечаемое нажатие клавиши для выхода из этого вида управляющих символов C-v (то есть, Control+V, CTRL+V). Если Вы поражаете это, то вкладка, можно было вставить реальную вкладку. Здесь с GNU bash и urxvt, это работает.

Правильно отладка этого требует знания точно, что является проблемой (то есть, что ест вкладку). Просто помещение \t там не будет работать если также dialog или Ваша оболочка имеет функцию для перевода этих завершенных последовательностей. Если Вы хотите их, то следуете совету @Eran Ben-Natan и используете GNU echoрасширенный режим (другие реализации могут/, отличается — нет никакого определенного поведения, указанного в POSIX (IEEE 1003.1 2008, страница 2615, строка 84306)).

26
23.09.2013, 04:36
1 ответ

Можно получить список "ключей" для ассоциативного массива как так:

$ echo "${!astr[@]}"
elemB elemA

Можно выполнить итерации по "ключам" как так:

for i in "${!astr[@]}"
do   
  echo "key  : $i"
  echo "value: ${astr[$i]}"
done

Пример

$ for i in "${!astr[@]}"; do echo "key  : $i"; echo "value: ${astr[$i]}"; done
key  : elemB
value: 199
key  : elemA
value: 123

Ссылки

35
27.01.2020, 19:40
  • 1
    я просто нашел его также, работает на численно индексные массивы также: astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]} Спасибо! –  Aquarius Power 23.09.2013, 19:29
  • 2
    @AquariusPower - Да при откате редактирований на моем ответе, Вы будете видеть, что я первоначально включал числовой индекс также, но затем отбросил его, так как Вы хотели названные хеши. –  slm♦ 23.09.2013, 19:33
  • 3
    Отметьте это ${!var[index]} не работает, только ${!var[@]} или ${!var[*]} сделайте :( –  i336_ 24.06.2016, 06:09
  • 4
    @i336_ - берет ! таким образом, это ${var[index]}. tldp.org/LDP/abs/html/arrays.html –  slm♦ 24.06.2016, 06:14
  • 5
    Извините, разъяснение: Я пытался определить ассоциативный ключ для числового индекса n. Я понял, что могу легко сделать keys=(${!var[@]}) и затем ${keys[n]}, предоставление мне индекс, но в то же время, я также понял, что должен заново продумать свой подход. –  i336_ 24.06.2016, 06:32

Теги

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