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