Сценарии Bash: Связанный Массив только распознает одно значение когда несколько данные

Ваше первое предположение не обязательно верно как "objects" или быть более точными файлами или исполняемыми файлами может иметь эти полномочия именно так, они не могут быть выполнены или считаны обычным пользователем / процесс, но с тем сказанным существует несколько процессов на телефоне на базе Android, работающем с root полномочия.

Я думаю, что очень важно понять, что Android является только системой Linux внизу, т.е. всем, что Вы видите по Телефону, не имеет многого вместе с Системой Linux как Ubuntu или Fedora, т.е. Вы не можете только выполнить команду как root с большей частью запаса изображения Android установлены на реальных аппаратных средствах. Нет также никакой потребности вообще для ввода a root пароль (насколько я знаю андроид, не установили пароль root) как Android не был многопользовательской системой.

Поскольку у Вас уже есть обычный пользователь по Вашему телефону, может быть возможно использовать/напасть саму систему для получения полномочий пользователя root, это было, например, сделано успешно для более старых систем Android как 2,1.

Я думаю, что необходимо взглянуть на, Как я базируюсь свой вопрос об устройстве на базе Android, он может помочь упростить и объяснить некоторые вещи.

2
13.01.2014, 01:39
2 ответа

Если Вы не объявляете переменную как ассоциативный массив, то

klang=([string_0]='element_0' [string_1]='element_1' [string_2]='element_2')

взят в качестве нормального присваивания массива (хотя примечание это в bash и ksh93, нормальные массивы не являются действительно нормальными массивами, они - более разреженные массивы или ассоциативные массивы с ключами, ограниченными положительными целыми числами).

В bash, для нормального массива ключи оценены как арифметические выражения. Как арифметическое выражение, string_0 оценивает к содержанию $string_0, и если это пусто, к 0. Таким образом, вышеупомянутое, вероятно, совпадет с:

klang=([0]='element_0' [0]='element_1' [0]='element_2')

Так, это совпадает с определением ${klang[0]} (который совпадает с $klang) 3 раза.

Это контрастирует с ksh93 массивы (который bash главным образом скопированный), где a=([x]=y) синтаксис только поддерживается для ассоциативных массивов и автоматически создал бы ассоциативный массив при использовании.

zsh ассоциативные массивы (которые предшествуют bash к десятилетиям), отличаются снова. zsh нормальные массивы являются нормальными массивами, zsh не поддерживает поддельное a=([x]=y) синтаксис. В zsh, необходимо объявить ассоциативные массивы прежде, чем определить их, и они определяются как:

normal_array=(val1 val2 val3)
typset -A associative_array
associative_array=(key1 val1 key2 val2)
associative_array+=(key3 val3...)

И $associative_array расходует к непустым значениям как для нормальных массивов (в неопределенном порядке), и "$associative_array[@]}" ко всем значениям как для нормальных массивов. ${(k)associative_array} для непустых ключей, "${(k@)associative_arrays}" для всех ключей, "${(kv@)associative_array}" для ключей и значений, таким образом, можно распечатать содержание ассоциативного массива с:

printf '%s => %s\n' "${(@kv)associative_array}"

Это также означает, что копирование ассоциативного массива является намного менее громоздким, чем с ksh93/bash:

typeset -A B
B=("${(kv@)A}")

в противоположность:

unset B
typeset -A B
for k in "${!A[@]}"; do B[$k]=${A[$k]}; done
1
27.01.2020, 21:52

Необходимо сначала объявить переменную (klang здесь), чтобы быть ассоциативным массивом с bash:

$ declare -A klang
$ klang=([string_0]='element_0' [string_1]='element_1' [string_2]='element_2')
$ echo "${klang[*]}"
element_2 element_0 element_1
$ echo "${#klang[*]}"
3

Ассоциативные массивы были представлены с bash версия 4.0.

Они были сначала реализованы ksh93, с которым не появляется эта проблема.

6
27.01.2020, 21:52
  • 1
    Закройте лицо рукой! Конечно!!! –  erch 13.01.2014, 01:36
  • 2
    просто другой вопрос (кандидат на фейспалм?): Что путь состоит в том, чтобы получить, скажем, второй элемент (element_1) только - или действительно ли это только доступно для индексных массивов? –  erch 13.01.2014, 01:56
  • 3
    я обновил свой вопрос с выводом sensors ---------121 ассоциативный массив--------178118----Shell не заказан дизайном, таким образом, нет никакого 'второго элемента' для начала. –  jlliagre 13.01.2014, 03:23
  • 4
    Это объясняет много … и действительно полезно - большое спасибо! –  erch 13.01.2014, 03:41

Теги

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