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
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]
.
${array[@]}
i doble anførselstegn. Ellers vil ordoppdeling utføres, og du vil få uønskede resultater på innganger somarray=("item 1" "item 2" "item 3")
.