hvordan tæller man længden på et array defineret i bash?

Jeg er ny i bash og kan ikke finde en god tutorial til at besvare mit spørgsmål.

array=( item1 item2 item3 ) for name in ${array[@]}; do echo current/total ... some other codes done 

Jeg vil beregne værdien current og total, da den forventede output af dette er:

1/3 2/3 3/3 

Tak for enhver form for tip.

Kommentarer

  • Bemærk, at du skal sætte ${array[@]} i dobbelt anførselstegn. Ellers udføres ordopdeling, og du får uønskede resultater på input som array=("item 1" "item 2" "item 3").

Svar

Du kan få adgang til arrayindeksene ved hjælp af ${!array[@]} og længden af arrayet ved hjælp af ${#array[@]} , for eksempel :

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

Bemærk, at da bash-arrays er nulindekseret , får du faktisk:

0/3 1/3 2/3 

Hvis du vil have optællingen fra 1, kan du erstatte $index med $((index+1)). Hvis du vil have værdier samt indekserne, kan du bruge "${array[index]}" dvs.

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

giver

1/3 = item1 2/3 = item2 3/3 = item3 

Kommentarer

  • Hvis jeg ønsker at få 1,2,3, kan Jeg gør dette: echo ($index+1)/${#array[@]}?
  • btw, det ser ud til, at på denne måde kan jeg ' t få item1, item2, item3 i loop. Jeg har stadig en anden kode til at håndtere item1, item2, item3 ting. Tak,
  • Se redigeret indlæg.

Svar

Et nulindeks er helt gyldigt hvis du tænker på indekset som faktisk er en offset fra basisadressen til en matrix. Det er faktisk normen, selvom det varierer fra dialekt til dialekt. Med det gamle joviale sprog indeholdt [0] faktisk den maksimale størrelse af arrayet. Så det startede med [1].

Med nogle grundlæggende implementeringer kan du vilkårligt vælge enten at have 0 eller 1 som det første indeks. Og mindst en Basic giver dig mulighed for at udpege arrays til indeks fra [n] til [m]. hvor n og m kan have en heltal værdi, endda negativ, så længe n er mindre end eller lig med m. Værdien n dem trækkes fra den indtastede [index], som index-n = 0 hvis indeks svarer til n.

Men du kan gøre det samme og mere i din egen kode Du kan endda vende ordren af en matrix på denne måde:

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

Dette kodeeksempel er faktisk kun delvist af et sprog. Jeg ville bare have det mere læsbart. Trinvariablen bruges til at kontrollere den tilsyneladende retning, du bevæger dig i, om den er positiv eller negativ, og bruges til at beregne det effektive indeks, når du går ind i eller kommer ud af arrayet, hvilket faktisk altid er positivt fra [0].

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *