как считать длину массива определенной в ударе?

Односторонняя дорога:

#!/bin/bash

for num in 1 2
do
    read -p "Enter new val for files starting with $num :" val
    for i in ${num}*.[abc]
    do
            ext=${i##*.}
            mv $i "$val.$ext"
    done
done
61
28.03.2015, 21:20
2 ответа

Вы можете получить доступ к индексам массива с использованием $ {! Array [@]} и длина массива с использованием $ {# Array [@]} , E.g. :

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done

Обратите внимание, что поскольку массивы Bash находятся NOL, проиндексированы , вы фактически получите:

0/3
1/3
2/3

, если вы хотите, чтобы подсчет запустить из 1, вы можете заменить $ index $ ((индекс + 1)) . Если вы хотите, чтобы значения , а также индексы, которые вы можете использовать «$ {Array [index]}» , то есть

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done

, давая

1/3 = item1
2/3 = item2
3/3 = item3
106
27.01.2020, 19:32

Нулевой индекс вполне допустим, если вы считаете индекс фактически смещением от базового адреса массива. На самом деле это норма, хотя в разных диалектах по-разному. В старом языке Jovial [0] фактически содержал максимальный размер массива. поэтому он начинался с [1].

В некоторых реализациях Basic вы можете произвольно выбрать 0 или 1 в качестве первого индекса. И по крайней мере один Basic позволяет назначать массивы для индексации от [n] до [m]. где n и m могут иметь любое целое значение, даже отрицательное, пока n меньше или равно m. Значение n при этом вычитается из введенного [index], так как index-n = 0, если index соответствует n.

Но вы можете сделать то же самое и даже больше в своем собственном коде. Вы даже можете изменить порядок массива таким образом:

dim array(0, abs(m-n)); 
step=sign(m-n); 
if n > m then 
    base=m 
else 
    base=n; 
fi

Этот пример кода на самом деле частично состоит из одного языка. Я просто хотел, чтобы он был более читабельным. Переменная step используется для контроля видимого направления движения, положительного или отрицательного, и используется для вычисления эффективного индекса при входе в массив или выходе из него, который на самом деле всегда положителен, начиная с [0].

1
27.01.2020, 19:32

Теги

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