Перенос индексации массивов в bash и zsh - PullRequest
0 голосов
/ 26 мая 2019

Индексирование массива основано на 0 в bash и 1 в zsh (если не установлена ​​опция KSH_ARRAYS).

Например: для доступа к первомуэлемент массива, есть что-то приятнее, чем:

if [ -n $BASH_VERSION ]; then
    echo ${array[0]}
else
    echo ${array[1]}
fi

1 Ответ

1 голос
/ 26 мая 2019

TL; DR:

Чтобы всегда получить согласованное поведение, используйте:

${array[@]:offset:length}

Объяснение

Для кода, который работает как bash, так и zsh, вам нужно использовать синтаксис offset:length вместо синтаксиса [subscript].

Даже для zsh -одного кода вам все равно нужно будет это сделать (или использовать emulate -LR zsh), поскольку основа подписки массива zsh определяется параметром KSH_ARRAYS .

Например, для ссылки на первый элемент в массиве:

${array[@]:0:1}

Здесь array[@] - все элементы, 0 - смещение (которое всегда основано на 0), а 1 - количество требуемых элементов.

...