Вихідний масив оболонки Shell


0

Мені хотілося знати, як повторювати останнє значення масиву в скрипті оболонки. наприклад, у мене є такий масив "

$ i = ("1", "2", "3")

і я хотів встановити умову в останньому положенні, це означає, що коли він потрапляє на позицію 3, він зупиняється, або він говорить "привіт світ".

Як я можу це зробити?

РЕДАКТУЙТЕ скрипт оболонки оболонки як у #! / Bin / sh


/bin/shвзагалі не має масивів. Ви хочете /bin/bash(або zsh або ksh)
glenn jackman

Поясню, я працюю з GRASS, і у мене проблема з одновимірним вектором чисел. Тепер я хочу надрукувати довжину цього вектора, тому що мій вихід виглядає приблизно так (1,2,3,4,5,6,7,8,9,), коли він повинен виглядати так (1,2,3, 4,5,6,7,8,9), це означає, що мені не потрібен останній роздільник
Джордж Нострадамос

Щойно помітили, що ви перехрестили більш повну версію свого питання тут: askubuntu.com/questions/947609/shell-scipt-array-output#947609
steeldriver

Відповіді:


2

Якщо припустити, що оболонка - Bash:

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

виведе c. Конструкція ${#i[@]}повертає кількість елементів у масиві i, тобто $((${#i[@]}-1))індекс останнього елемента. Детальніше man bashдив. він містить розділ з назвою Масиви .

echo "${i[-1]}"

також лунає c, тому що негативні індекси підраховуються з кінця масиву.

А елементи масиву в дужках розділені пробілами, а не комами.


Сценарій оболонки оболонки
Джордж Нострадамос

@glennjackman: Ви, очевидно, правильні, і я не знаю, що я скопіював і вставив з терміналу. Відповідь відредаговано відповідно.
AlexP

0

Ваш синтаксис масиву неправильний: ви хочете 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"

В іншому випадку, які ваші фактичні вимоги?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.