UNIX-skal (som bash, ZSH, SH) har inte matriser på samma sätt som språk på högre nivå som Python eller C ++. De hanterar matriser på ett mindre strukturerat sätt, vanligtvis med hjälp av whitespace-separerade strängar eller speciella tekniker. Så här kan du arbeta med matrisliknande strukturer i olika UNIX-skal-sammanhang:
1. Whitespace-separerade strängar:
Detta är den enklaste metoden. Du lagrar i huvudsak element som en enda sträng, separerad av mellanslag (eller andra avgränsare du väljer). Åtkomst till enskilda element kräver strängmanipulation.
`` `bash
my_array ="Apple Banana Cherry"
åtkomst till det första elementet (förutsatt att rymdseparation):
First_Element ="$ {my_array %% *}" #removes allt från det första utrymmet och framåt.
echo "$ First_Element" # Output:Apple
åtkomst till det andra elementet:
second_element ="$ {my_array #*}" #removes allt upp till det första utrymmet.
Second_Element ="$ {Second_Element %% *}" #removes allt från det första utrymmet och framåt
Echo "$ Second_Element" # Output:Banana
#Itering (mindre effektiv):
för frukt i $ my_array; do
echo "$ frukt"
gjort
`` `
Begränsningar: Detta tillvägagångssätt är felutsatt om arrayelement innehåller själva utrymmen.
2. Använda matriser i bash (och andra skal med matrisstöd):
Bash (och några andra moderna skal) ger mer robust array -stöd.
`` `bash
förklarar en matris
my_array =("äpple" "banan" "körsbär")
Åtkomst till element:
echo "$ {my_array [0]}" # output:Apple
echo "$ {my_array [1]}" # utgång:banan
Få matrislängden:
echo "$ { # my_array [@]}" # output:3
iterating:
för i i "$ {! my_array [@]}"; gör #iterat genom index
echo "$ {my_array [i]}"
gjort
eller iterera direkt genom element:
för frukt i "$ {my_array [@]}"; do
echo "$ frukt"
gjort
#Adding Elements:
my_array+=("datum")
echo "$ {my_array [3]}" #output:datum
#Tillägg till array:
my_array+=(druva orange)
#Removing Elements (mindre enkelt, kräver växling):
unset 'my_array [1]' #removes element vid index 1 (banan)
#Inte att indexen inte flyttas automatiskt. Det finns ingen inbyggd skift efter radering.
Skriv ut den modifierade arrayen:
för frukt i "$ {my_array [@]}"; do
echo "$ frukt"
gjort
`` `
Viktiga överväganden:
* Citat: Citera alltid arrayvariabler (t.ex. `" $ {my_array [@]} "`) för att förhindra orddelning och globering, vilket kan leda till oväntat beteende. Detta är särskilt kritiskt när arrayelement kan innehålla utrymmen eller specialtecken.
* index 0: Matriser i bash är 0-indexerade, vilket betyder att det första elementet är vid index 0.
* skalspecifikt: Syntaxen och funktioner som finns tillgängliga för matriser kan variera något beroende på det specifika skalet du använder (bash, zsh, ksh, etc.).
3. Använda kommandoradsverktyg för matrisliknande operationer:
För mer komplexa arraymanipulationer (sortering, filtrering etc.) kommer du ofta att hitta det mer effektivt att använda externa kommandoradsverktyg som `awk`,` sed` eller `sort`. Dessa verktyg utmärker sig vid textbehandling, som kan anpassas för att arbeta med data strukturerade som avgränsade strängar.
För att till exempel sortera elementen i en vitspace-separerad sträng:
`` `bash
my_array ="Apple Banana Cherry"
echo "$ my_array" | tr '' '\ n' | sort | tr '\ n' ''
`` `
Sammanfattningsvis, medan UNIX-skal inte har inbyggda, rika matrisstrukturer som andra språk, är BASHs array-stöd tillräckligt för många uppgifter. För komplexa manipulationer, överväg att utnyttja kraften i textbehandlingsföretag. Kom ihåg att alltid citera dina arrayvariabler korrekt för att undvika potentiella fel.