hvordan teller du lengden på en matrise definert i bash?

Jeg er ny i bash og kan ikke finne en god veiledning for å svare på spørsmålet mitt.

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

Jeg vil beregne current og total -verdien, som forventet utgang av dette:

1/3 2/3 3/3 

Takk for alle slags tips.

Kommentarer

  • Merk at du bør legge ${array[@]} i doble anførselstegn. Ellers vil ordoppdeling utføres, og du vil få uønskede resultater på innganger som array=("item 1" "item 2" "item 3").

Svar

Du kan få tilgang til matriseindeksene ved hjelp av ${!array[@]} og lengden på matrisen ved hjelp av ${#array[@]} , f.eks :

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

Merk at siden bash-matriser er nullindeksert , får du faktisk:

0/3 1/3 2/3 

Hvis du vil at tellingen skal løpe fra 1, kan du erstatte $index med $((index+1)). Hvis du vil ha verdiene samt indeksene, kan du bruke "${array[index]}" dvs.

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

gir

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

Kommentarer

  • Hvis jeg vil få 1,2,3, kan Jeg gjør dette: echo ($index+1)/${#array[@]}?
  • btw, det ser ut til at jeg på denne måten kan ' t få item1, item2, item3 i løkken. Jeg har fortsatt annen kode for å håndtere item1, item2, item3 ting. Takk,
  • Se redigert innlegg.

Svar

En nullindeks er helt gyldig hvis du tenker på indeksen som en forskyvning fra basisadressen til en matrise. Det er faktisk normen, selv om det varierer fra dialekt til dialekt. Med det gamle joviale språket inneholdt [0] faktisk den maksimale størrelsen på matrisen. Så det startet med [1].

Med noen grunnleggende implementeringer kan du vilkårlig velge å ha enten 0 eller 1 som første indeks. Og minst én Basic lar deg angi matriser for å indeksere fra [n] til [m]. der n og m kan ha en hvilken som helst heltallverdi, til og med negativ, så lenge n enn eller lik m. Verdien n dem blir trukket fra [index] angitt, som index-n = 0 hvis indeks tilsvarer n.

Men du kan gjøre det samme og mer i din egen kode Du kan til og med reversere ordren av en matrise på denne måten:

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

Dette kodeeksemplet er faktisk bare delvis av ett språk. Jeg ville bare at det skulle være mer lesbart. Trinnvariabelen brukes til å kontrollere den tilsynelatende retningen du beveger deg i enten positiv eller negativ, og brukes til å beregne den effektive indeksen når du går inn i eller kommer ut av matrisen, som faktisk alltid er positiv fra [0].

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *