Как убрать последний элемент массива в bash? - PullRequest
1 голос
/ 24 марта 2020

Синтаксис для удаления элемента из массива можно найти здесь: Удалить элемент из Bash массива

Кроме того, здесь показано, как найти последний элемент массив: https://unix.stackexchange.com/questions/198787/is-there-a-way-of-reading-the-last-element-of-an-array-with-bash

Но как я могу смешать их (если это возможно) вместе, чтобы удалить последний элемент массива?

I попробовал это:

TABLE_COLUMNS=${TABLE_COLUMNS[@]/${TABLE_COLUMNS[-1]}}

Но выдает:

неверный индекс массива

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

Вы можете использовать unset, чтобы удалить указанный c элемент массива, учитывая его позицию.

$ foo=(1 2 3 4 5)
$ printf "%s\n" "${foo[@]}"
1
2
3
4
5
$ unset 'foo[-1]'
$ printf "%s\n" "${foo[@]}"
1
2
3
4
1 голос
/ 24 марта 2020

Редактировать : Это полезно для печати элементов, кроме последних, без изменения массива. См. ответ Чепнера для более удобного решения OP.


Расширения подстрок * могут использоваться в массивах для извлечения подмассивов, например:

TABLE_COLUMNS=("${TABLE_COLUMNS[@]::${#TABLE_COLUMNS[@]}-1}")

* Синтаксис:

${parameter:offset:length}

И offset, и length являются арифметическими c выражениями, пустое offset подразумевает 1 , Используется в расширениях массива (т. Е. Когда parameter - это имя массива, подписанное * или @), в результате получается не более length элементов, начиная с offset.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...