Вихідний масив оболонки 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.