Jestem nowy w bash i nie mogę znaleźć dobrego samouczka, aby odpowiedzieć na moje pytanie.
array=( item1 item2 item3)
for name in ${array[@]}; do
echo current/total
... some other codes
done
Chcę obliczyć wartość „bieżącą” i „całkowitą”, ponieważ oczekiwany wynik tego:
1/3
2/3
3/3
Dzięki za wszelkie wskazówki
${array[@]}
podwójne cudzysłowy. W przeciwnym razie zostanie wykonane dzielenie słów, a przy takich wejściach otrzymasz niepożądane rezultatyarray=("item 1" "item 2" "item 3")
.Odpowiedzi:
Możesz uzyskać dostęp do wskaźników tablicy za pomocą
${!array[@]}
i długości tablicy za pomocą${#array[@]}
, np .:Zauważ, że ponieważ tablice bash są indeksowane na zero , faktycznie otrzymasz:
Jeśli chcesz, aby uruchomić liczenie od 1 można zastąpić
$index
przez$((index+1))
. Jeśli chcesz wartości, a także indeksów, których możesz użyć,"${array[index]}"
tjdający
źródło
echo ($index+1)/${#array[@]}
:?Indeks zerowy jest całkowicie poprawny, jeśli myślisz, że indeks jest faktycznie przesunięciem względem adresu bazowego tablicy. To w rzeczywistości norma, choć różni się w zależności od dialektu. W starym języku Jovial
[0]
faktycznie zawierał maksymalny rozmiar tablicy. więc zaczęło się od[1]
.W przypadku niektórych podstawowych implementacji możesz dowolnie wybrać jeden
0
lub1
pierwszy indeks. I co najmniej jeden podstawowy pozwala na wyznaczenie granic tablic do indeksu[n]
do[m]
. gdzien
im
może mieć dowolną wartość całkowitą, nawet ujemną, o ilen
jest mniejsza lub równam
. Wartośćn
zostaje odjęta od[index]
wprowadzonego, takindex-n = 0
jakby indeks odpowiadałn
.Ale możesz zrobić to samo i więcej we własnym kodzie. Możesz nawet odwrócić kolejność tablicy w ten sposób:
Ten przykład kodu jest w rzeczywistości tylko częściowo z jednego języka. Chciałem tylko, żeby był bardziej czytelny. Zmienna krokowa służy do kontrolowania pozornego kierunku, w którym się poruszasz, niezależnie od tego, czy jest ona dodatnia czy ujemna, i służy do obliczania efektywnego indeksu przy wchodzeniu do tablicy lub wychodzeniu z niej, z którego faktycznie zawsze jest dodatnia
[0]
.źródło