Indexarrays gebruiken in Bash

Indexarrays Gebruiken In Bash



Bash biedt ondersteuning voor geïndexeerde arrays, dit zijn in wezen lijsten met elementen die toegankelijk zijn met behulp van hun indexnummer. Geïndexeerde arrays zijn met name handig wanneer u veel gerelateerde waarden wilt opslaan en manipuleren. Lees dit artikel verder om te leren hoe u indexarrays gebruikt.

Wat zijn indexarrays

Geïndexeerde arrays zijn een verzameling elementen in bash die toegankelijk zijn met behulp van een index of een sleutel. Deze arrays kunnen worden gebruikt om gegevens in een specifieke volgorde op te slaan en op te halen, waardoor het gemakkelijker wordt om grote hoeveelheden gegevens te beheren. De syntaxis voor het declareren van een geïndexeerde array in bash is als volgt:

< array_name > = ( element1 element2 element3 ... )

Hier is array_name de naam van de array, en element1, element2, element3, enzovoort zijn de waarden die in de array moeten worden opgeslagen. De waarden worden gescheiden door witruimte en houd er rekening mee dat u ook de opdracht declare kunt gebruiken om een ​​array te maken.







Geïndexeerde arrays gebruiken in Bash

Om een ​​indexarray in bash te maken, hoef je alleen maar een variabele te declareren en er waarden aan toe te wijzen tussen haakjes en gescheiden door spaties. Hier zijn enkele voorbeelden die laten zien hoe geïndexeerde arrays in bash kunnen worden gebruikt:



Een lijst opnieuw ordenen in Bash

Als u een lijst met items in een bepaalde volgorde heeft en u deze op een andere manier opnieuw wilt ordenen. U kunt een indexarray gebruiken om als volgt een nieuwe volgorde voor de items te maken:



#!/bin/bash
artikelen = ( 'Mango' 'Ananas' 'Aardbei' 'Kers' 'Druiven' )
volgorde = ( 4 2 0 3 1 )
voor i in ' ${bestelling[@]} '
Doen
echo ${items[$i]}
klaar

In dit voorbeeld maken we een array met de naam items met vijf elementen. We maken ook een indexarray met de naam order, die een nieuwe volgorde voor de items specificeert. Vervolgens doorlopen we de volgorde-array en gebruiken we elke waarde als een index om het overeenkomstige item uit de items-array op te halen en af ​​te drukken.





Een lijst filteren in Bash

Als u een lijst met items heeft en u bepaalde items wilt filteren op basis van een voorwaarde. U kunt een indexarray gebruiken om de indexen bij te houden van de items die aan de voorwaarde voldoen, en wel als volgt:



#!/bin/bash
artikelen = ( 'Mango' 'Ananas' 'Aardbei' 'Kers' 'Druiven' )
indexen = ( )

voor i in ' ${!artikelen[@]} '
Doen
als [ [ ${items[$i]} == * 'R' * ] ]
Dan
indexen+= ( $ ik )
zijn
klaar

voor i in ' ${indices[@]} '
Doen
echo ${items[$i]}
klaar

In dit voorbeeld maken we een array met de naam items met vijf elementen. We maken ook een lege indexarray met de naam indices. Vervolgens doorlopen we de items-array en controleren we of elk item de letter 'r' bevat. Als dit het geval is, voegen we de index toe aan de indexarray. Ten slotte doorlopen we de indexarray en gebruiken we elke waarde als een index om het overeenkomstige item uit de itemsarray op te halen en af ​​te drukken.

Voorvallen tellen in Bash

Als u een lijst met items hebt en u wilt het aantal exemplaren van elk item tellen, kunt u een indexarray gebruiken om de tellingen bij te houden en hier is een voorbeeld ter demonstratie:

#!/bin/bash
artikelen = ( 'Mango' 'Ananas' 'Aardbei' 'Kers' 'Druiven' )
telt = ( )

voor i in ' ${!artikelen[@]} '
Doen
als [ [ ! ' ${telt[@]} ' =~ ' ${items[$i]} ' ] ]
Dan
telt+= ( ' ${items[$i]} 1' )
anders
inhoudsopgave =$ ( echo ' ${telt[@]} ' | tr '' '\N' | greep -N '^ ${items[$i]} ' | met )
graaf =$ ( echo ' ${counts[$index-1]} ' | snee -D '' -f2 )
telt [ $index - 1 ] = ' ${items[$i]} $((tel+1) )'
zijn
klaar

voor graaf in ' ${telt[@]} '
Doen
echo $ tellen
klaar

Het initialiseert eerst een array met de naam 'items' met een lijst met strings. Vervolgens declareert het een lege array met de naam 'counts'. Er wordt een for-lus gemaakt om te herhalen voor elk item in de 'items'-array en voor elk item wordt gecontroleerd of het al bestaat in de 'counts'-array.

Als het niet bestaat, voegt het het item en de telling van 1 toe aan de 'counts' -array. Als het bestaat, verhoogt het de telling van dat item in de 'counts' -array. Ten slotte wordt voor het afdrukken van elk item en de bijbehorende telling een andere for-lus gebruikt. De uitvoer van deze code zal het aantal van elk item in de array 'items' afdrukken, waarbij duplicaten afzonderlijk worden geteld.

Een lijst bijwerken in Bash

Als u een lijst met items hebt en u wilt er items aan toevoegen of verwijderen, dan kunt u hiervoor een indexarray gebruiken en hier is een voorbeeld ter demonstratie:

#!/bin/bash
artikelen = ( 'Mango' 'Ananas' 'Aardbei' 'Kers' 'Druiven' )

# Een nieuw element toevoegen aan de geïndexeerde array op index 2
artikelen [ 6 ] = 'oranje'
# Het element op index 2 verwijderen uit de geïndexeerde array
uitgeschakeld artikelen [ 2 ]

# Afdrukken van de bijgewerkte array
echo ' ${items[@]} '

In het script wordt een geïndexeerde array 'items' gedefinieerd met vijf initiële elementen. Om een ​​nieuw element toe te voegen, wordt de waarde eenvoudig toegewezen aan de gewenste index met behulp van de syntaxis array[index]=waarde. In dit script wordt 'oranje' toegevoegd aan index 6 van de array. Om een ​​element te verwijderen, gebruiken we de opdracht unset gevolgd door de index van het element dat we willen verwijderen. In dit geval wordt het element bij index 2 ('Aardbei') verwijderd. De bijgewerkte array wordt vervolgens afgedrukt met de syntaxis '${array[@]}', waarmee de hele array wordt uitgebreid.

Conclusie

De geïndexeerde arrays zijn een handige structuur van bash waarmee je meerdere waarden kunt opslaan en manipuleren met behulp van een enkele variabele. Door de syntaxis en het gebruik van geïndexeerde arrays te begrijpen, kunt u efficiëntere en effectievere bash-scripts schrijven.