Что делает объявление массива bash с помощью -A?

Предполагая, что нежелательный CRLF в данных не встречается в начале поля, вы можете:

Заменить предполагаемый CRLF в конец строки с Linux EOL, LF .

Это должно происходить после вертикальной черты. Эфир напрямую или через пробел. Поэтому замените строки «pipe space CRLF» и «pipe CRLF» на «pipe space LF» или «pipe LF»

0x7C 0x20 0x0D 0x0A и 0x7C 0x0D 0x0A

на

0x7C 0x20 0x0A и 0x7C 0x0A

Теперь единственный CRLF , который остался, находится в данных. Замените эту строку «CRLF» пробелом или нулем.

0x0D 0x0A до 0x20

править:

Предполагаемый EOL должен быть между 2 трубами.

| данные | CRLF

| данные |

0x7C 0x0D 0x0A 0x7C
1
08.08.2017, 10:17
1 ответ

В bash массивы могут быть либо индексированными либо ассоциативными . Индексированные массивы имеют числовой индекс и (по умолчанию )перебираются в соответствии с числовым порядком их индексов.

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

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

Массивы в bash по умолчанию являются индексированными массивами. Вы можете явно объявить индексированный массив сdeclare -a(строчными буквами a. Независимо от того, будет ли declared индексироваться или создан как индексированный массив по умолчанию, если вы попытаетесь установить элемент массива с числовым индексом, отличным от -, индекс всегда будет оцениваться как 0, переопределять или создавать значение (если есть )нулевого элемента массива.

напр.

$ declare -a foo
$ foo[0]=5
$ foo[1]=2
$ declare -p foo
declare -a foo=([0]="5" [1]="2")

Ладно, этого и следовало ожидать. А теперь попробуйте установитьfoo[bar]:

$ foo[bar]=99
$ declare -p foo
declare -a foo=([0]="99" [1]="2")

Точно так же вы можете объявить массив ассоциативным с помощьюdeclare -A(обратите внимание на заглавнуюA). Это заставит массив быть ассоциативным, даже если ВСЕ индексы являются числовыми.

$ unset foo
$ declare -A foo
$ foo[0]=5
$ foo[1]=2
$ foo[bar]=99
$ declare -p foo
declare -A foo=([bar]="99" [0]="5" [1]="2" )

Итак, ответ на ваш вопрос заключается в том, что в примере _1 вы объявили cityассоциативным массивом . В примере _2 вы этого не сделали, поэтому по умолчанию это массив с индексом .

4
27.01.2020, 23:24

Теги

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