Вывод массива скриптов

Я хотел знать, как эхо последнему значению массива в сценарии оболочки. например, у меня есть следующий массив «

$ i = (« 1 »,« 2 »,« 3 »)

, и я хотел установить условие в последней позиции, это означает, что когда он попадает в позицию 3, он останавливается или говорит «hello world».

Как я могу это сделать?

EDIT shell - это сценарий оболочки, как в #! / bin / ш

0
задан 19 August 2017 в 00:08

4 ответа

Предполагая, что оболочка Bash:

i=("a" "b" "c"); echo "${i[$((${#i[@]}-1))]}"

выведет c. Конструкция ${#i[@]} возвращает количество элементов в массиве i, так что $((${#i[@]}-1)) является индексом последнего элемента. Подробности см. В man bash; он содержит раздел «Массивы».

echo "${i[-1]}"

также отображает эхо c, поскольку отрицательные индексы подсчитываются от конца массива.

И элементы массива в круглых скобках разделяются пробелами, а не запятыми.

2
ответ дан 18 July 2018 в 08:18

Синтаксис вашего массива неверен: вы хотите i=(1 2 3)

Последний элемент:

$ echo "${i[-1]}" 3

Однако это пахнет вопросом XY.

Вы действительно хотите перебирать все, но последние элементы? Затем сделайте следующее:

len=${#i[@]} for elem in "${i[@]:0:len-1}"; do echo "$elem" done echo "hello world"

В противном случае, каковы ваши фактические требования?

0
ответ дан 18 July 2018 в 08:18

Предполагая, что оболочка Bash:

i=("a" "b" "c"); echo "${i[$((${#i[@]}-1))]}"

выведет c. Конструкция ${#i[@]} возвращает количество элементов в массиве i, так что $((${#i[@]}-1)) является индексом последнего элемента. Подробности см. В man bash; он содержит раздел «Массивы».

echo "${i[-1]}"

также отображает эхо c, поскольку отрицательные индексы подсчитываются от конца массива.

И элементы массива в круглых скобках разделяются пробелами, а не запятыми.

2
ответ дан 24 July 2018 в 19:03
  • 1
    Оболочка - это сценарий оболочки – George Nostradamos 19 August 2017 в 00:07
  • 2
    @glennjackman: Вы, очевидно, правы, и я не знаю, что я скопировал и вставил с терминала. Ответ был отредактирован соответствующим образом. – AlexP 19 August 2017 в 00:19

Синтаксис вашего массива неверен: вы хотите i=(1 2 3)

Последний элемент:

$ echo "${i[-1]}" 3

Однако это пахнет вопросом XY.

Вы действительно хотите перебирать все, но последние элементы? Затем сделайте следующее:

len=${#i[@]} for elem in "${i[@]:0:len-1}"; do echo "$elem" done echo "hello world"

В противном случае, каковы ваши фактические требования?

0
ответ дан 24 July 2018 в 19:03

Другие вопросы по тегам:

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