Предполагая, что нежелательный 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
В bash массивы могут быть либо индексированными либо ассоциативными . Индексированные массивы имеют числовой индекс и (по умолчанию )перебираются в соответствии с числовым порядком их индексов.
Ассоциативный массив (, также известный как hash
илиhashed array
)в bash, может использовать любую строку в качестве индекса (, также известного как key
)-, эта строка может быть числовой (или казаться числовой, в скрипте bash )мало различий, или это может быть любая другая допустимая строка.
Ассоциативные массивы в bash, как и во многих языках, неупорядочены. Если вы просто перебираете массив (, например. без сортировки ключей )вы получите элементы массива в полуслучайном -порядке.
Массивы в bash по умолчанию являются индексированными массивами. Вы можете явно объявить индексированный массив сdeclare -a
(строчными буквами a
. Независимо от того, будет ли declare
d индексироваться или создан как индексированный массив по умолчанию, если вы попытаетесь установить элемент массива с числовым индексом, отличным от -, индекс всегда будет оцениваться как 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 вы этого не сделали, поэтому по умолчанию это массив с индексом .