Вы можете использовать split+glob (что происходит, когда вы оставляете раскрытие без кавычек в контекстах списка ). Он мешает нам большую часть времени, было бы стыдно не использовать его, когда он нам действительно нужен:
IFS=,
set -o noglob
ARR=($VAR) # split+glob with glob disabled, and split using, as delimiter
Это немного менее запутанно, чем запись временного файла и последующий вызов readarray
для него, как в подходе readarray <<< "$string"
(также обратите внимание, что readarray -d
нужна самая последняя версияbash
).
Обратите внимание, что несмотря на то, что S
вIFS
(означает разделитель ), он работает так же, как readarray
в том смысле, что a,,b,
разбивается на "a"
, ""
и только "b"
.
Для настоящего оператора расщепления вы можете использовать zsh
вместо:
ARR=("${(@s:,:)VAR}")
(@
и двойные кавычки для сохранения пустых элементов ).