logo

Tablica Basha

W tym temacie zademonstrujemy podstawy tablic bash i sposób ich wykorzystania w skryptach powłoki bash.

Tablicę można zdefiniować jako zbiór elementów podobnego typu. W przeciwieństwie do większości języków programowania, tablice w skryptach bash nie muszą być zbiorem podobnych elementów. Ponieważ Bash nie odróżnia ciągu znaków od liczby, tablica może zawierać zarówno ciągi, jak i liczby.

Bash nie zapewnia obsługi tablic wielowymiarowych; nie możemy mieć elementów, które same w sobie są tablicami. Bash zapewnia obsługę jednowymiarowych tablic indeksowanych numerycznie oraz tablic asocjacyjnych. Aby uzyskać dostęp do tablicy indeksowanej numerycznie od ostatniej, możemy użyć indeksów ujemnych. Indeks „-1” będzie traktowany jako odniesienie dla ostatniego elementu. Możemy użyć kilku elementów w tablicy.

Deklaracja tablicy Bash

Tablice w Bash można deklarować w następujący sposób:

Tworzenie tablic indeksowanych numerycznie

Możemy użyć dowolnej zmiennej jako tablicy indeksowanej bez jej deklarowania.

Aby jawnie zadeklarować zmienną jako tablicę Bash, użyj słowa kluczowego „deklaruj”, a składnię można zdefiniować jako:

 declare -a ARRAY_NAME 

Gdzie,

ARRAY_NAME wskazuje nazwę, którą przypisalibyśmy tablicy.

Notatka:Zasady nazewnictwa zmiennych w Bash są takie same jak w przypadku nazewnictwa tablicy.

Ogólną metodę tworzenia tablicy indeksowanej można zdefiniować w następującej formie:

 ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n 

gdzie słowo kluczowe „indeks” służy do definiowania dodatnich liczb całkowitych.

Tworzenie tablic skojarzonych

W przeciwieństwie do tablic indeksowanych numerycznie, tablice asocjacyjne są najpierw deklarowane. Możemy użyć słowa kluczowego „deklaruj” i opcji -A (wielkie litery), aby zadeklarować tablice asocjacyjne. Składnię można zdefiniować jako:

 declare -A ARRAY_NAME 

Ogólną metodę tworzenia tablicy asocjacyjnej można zdefiniować w następującej formie:

 declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz 

gdzie indeks_ służy do zdefiniowania dowolnego ciągu.

Powyższy formularz możemy zapisać także w następujący sposób:

uczynienie skryptu powłoki wykonywalnym
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inicjalizacja tablicy Bash

Aby zainicjować tablicę Bash, możemy użyć operatora przypisania (=), podając listę elementów w nawiasach, oddzielonych spacjami, jak poniżej:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Notatka:Tutaj pierwszy element będzie miał indeks 0. Poza tym wokół operatora przypisania (=) nie powinno być spacji.

Uzyskaj dostęp do elementów tablicy Bash

Aby uzyskać dostęp do elementów tablicy Bash, możemy zastosować następującą składnię:

uzyskaj długość tablicy w c
 echo ${ARRAY_NAME[2]} 

Wydrukuj tablicę Bash

Możemy użyć słowa kluczowego „deklaruj” z opcją „-p”, aby wydrukować wszystkie elementy tablicy Bash ze wszystkimi indeksami i szczegółami. Składnię drukowania tablicy Bash można zdefiniować jako:

 declare -p ARRAY_NAME 

Operacje na tablicach

Po przypisaniu tablicy możemy wykonać na niej kilka przydatnych operacji. Możemy wyświetlić jego klucze i wartości, a także zmodyfikować je, dodając lub usuwając elementy:

Elementy odniesienia

Aby odwołać się do pojedynczego elementu, musimy znać numer indeksu elementu. Możemy odwołać się lub wydrukować dowolny element, używając następującej składni:

 ${ARRAY_NAME[index]} 

Notatka:Aby uniknąć operatorów rozwijania nazw plików powłoki, wymagane są nawiasy klamrowe ${}.

Na przykład wydrukujmy element tablicy z indeksem 2:

Skrypt Basha

 #!/bin/bash #Script to print an element of an array with an index of 2 #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #printing the element with index of 2 echo ${example_array[2]} 

Wyjście

 Javatpoint 

Jeśli użyjemy @ lub * w miejscu określonego indeksu, zostanie on rozszerzony na wszystkie elementy tablicy. Aby wydrukować wszystkie elementy możemy skorzystać z poniższego formularza:

Skrypt Basha

 #!/bin/bash #Script to print all the elements of the array #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing all the elements echo '${example_array[@]}' 

Wyjście

 Welcome to Javatpoint 

Jedyna różnica między używaniem @ i * polega na tym, że podczas używania @ formularz jest otoczony podwójnymi cudzysłowami. W pierwszym przypadku (podczas używania @) rozwinięcie dostarcza wynik w słowie dla każdego elementu tablicy. Można to lepiej opisać za pomocą „pętli for”. Załóżmy, że mamy tablicę zawierającą trzy elementy: „Witamy”, „Do” i „Javatpoint”:

 $ example_array= (Welcome to Javatpoint) 

Stosowanie pętli za pomocą @:

 for i in '${example_array[@]}'; do echo '$i'; done 

Da to następujący wynik:

 Welcome To Javatpoint 

Zastosowanie pętli z * spowoduje wygenerowanie pojedynczego wyniku zawierającego wszystkie elementy tablicy jako jedno słowo:

 Welcome To Javatpoint 

Ważne jest, aby zrozumieć użycie @ i *, ponieważ są one przydatne podczas korzystania z formularza do iteracji po elementach tablicy.

Drukowanie kluczy tablicy

Możemy także pobrać i wydrukować klucze używane w tablicach indeksowanych lub asocjacyjnych zamiast ich odpowiednich wartości. Można tego dokonać dodając ! operator przed nazwą tablicy, jak poniżej:

jak usunąć kolumnę w postgresql
 ${!ARRAY_NAME[index]} 

Przykład

 #!/bin/bash #Script to print the keys of the array #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing the Keys echo '${!example_array[@]}' 

Wyjście

 0 1 2 

Znajdowanie długości tablicy

Liczbę elementów zawartych w tablicy możemy policzyć korzystając z poniższej formy:

 ${#ARRAY_NAME[@]} 

Przykład

 #!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements' 

Wyjście

 The array contains 3 elements 

Wykonaj pętlę przez tablicę

Ogólną metodą iteracji po każdym elemencie tablicy jest użycie pętli for.

Przykład

 #!/bin/bash #Script to print all keys and values using loop through the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Array Loop for i in '${!example_array[@]}' do echo The key value of element '${example_array[$i]}' is '$i' done 

Wyjście

Tablica Basha

Inną popularną metodą pętli po tablicy jest pobranie długości tablicy i użycie pętli w stylu C:

Skrypt Basha

 #!/bin/bash #Script to loop through an array in C-style declare -a example_array=( &apos;Welcome&apos;&apos;To&apos;&apos;Javatpoint&apos; ) #Length of the Array length=${#example_array[@]} #Array Loop for (( i=0; i <${length}; i++ )) do echo $i ${example_array[$i]} done < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-2.webp" alt="Bash Array"> <h3>Adding Elements to an Array</h3> <p>We have an option to add elements to an indexed or associative array by specifying their index or associative key respectively. To add the new element to an array in bash, we can use the following form:</p> <pre> ARRAY_NAME[index_n]=&apos;New Element&apos; </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP HTML JavaScript </pre> <p>Another method for adding a new element to an array is by using the += operator. There is no need to specify the index in this method. We can add one or multiple elements in the array by using the following way:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP JavaScript CSS SQL </pre> <h3>Updating Array Element</h3> <p>We can update the array element by assigning a new value to the existing array by its index value. Let&apos;s change the array element at index 4 with an element &apos;Javatpoint&apos;.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} </pre> <p> <strong>Output</strong> </p> <pre> We welcome you on Javatpoint </pre> <h3>Deleting an Element from an Array</h3> <p>If we want to delete the element from the array, we have to know its index or key in case of an associative array. An element can be removed by using the &apos; <strong>unset</strong> &apos; command:</p> <pre> unset ARRAY_NAME[index] </pre> <p>An example is shown below to provide you a better understanding of this concept:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, &apos;Java&apos;, &apos;Python&apos;, &apos;HTML&apos;, &apos;CSS&apos; and &apos;JavaScript&apos;. Then we removed the element &apos;Python&apos; from the array by using &apos;unset&apos; and referencing the index of it. The index of element &apos;Python&apos; was &apos;1&apos;, since bash arrays start from 0. If we check the indexes of the array after removing the element, we can see that the index for the removed element is missing. We can check the indexes by adding the following command into the script:</p> <pre> echo ${!example_array[@]} </pre> <p>The output will look like:</p> <pre> 0 2 3 4 </pre> <p>This concept also works for the associative arrays.</p> <h3>Deleting the Entire Array</h3> <p>Deleting an entire array is a very simple task. It can be performed by passing the array name as an argument to the &apos; <strong>unset</strong> &apos; command without specifying the index or key.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-3.webp" alt="Bash Array"> <p>There will be no output if we try to print the content of the above script. An empty result is returned because the array doesn&apos;t exist anymore.</p> <h3>Slice Array Elements</h3> <p>Bash arrays can also be sliced from a given starting index to the ending index.</p> <p>To slice an array from starting index &apos;m&apos; to an ending index &apos;n&apos;, we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-4.webp" alt="Bash Array"> <hr></${length};>

Przykład

 #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; 

Wyjście

 Java Python PHP HTML JavaScript 

Inną metodą dodania nowego elementu do tablicy jest użycie operatora +=. W tej metodzie nie ma potrzeby podawania indeksu. Możemy dodać jeden lub wiele elementów do tablicy, korzystając z następującego sposobu:

Przykład

 #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; 

Wyjście

 Java Python PHP JavaScript CSS SQL 

Aktualizowanie elementu tablicy

Możemy zaktualizować element tablicy, przypisując nową wartość do istniejącej tablicy według jej wartości indeksu. Zmieńmy element tablicy o indeksie 4 na element „Javatpoint”.

Przykład

 #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} 

Wyjście

 We welcome you on Javatpoint 

Usuwanie elementu z tablicy

Jeśli chcemy usunąć element z tablicy, musimy znać jego indeks lub klucz w przypadku tablicy asocjacyjnej. Element można usunąć za pomocą przycisku „ nieoprawny ' Komenda:

 unset ARRAY_NAME[index] 

Przykład pokazano poniżej, aby zapewnić lepsze zrozumienie tej koncepcji:

Przykład

jak przekonwertować ciąg na int w Javie
 #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; 

Wyjście

 Java HTML CSS JavaScript 

Tutaj stworzyliśmy prostą tablicę składającą się z pięciu elementów: „Java”, „Python”, „HTML”, „CSS” i „JavaScript”. Następnie usunęliśmy element „Python” z tablicy, używając „unset” i odwołując się do jego indeksu. Indeks elementu „Python” wynosił „1”, ponieważ tablice bash zaczynają się od 0. Jeśli sprawdzimy indeksy tablicy po usunięciu elementu, zobaczymy, że brakuje indeksu dla usuniętego elementu. Indeksy możemy sprawdzić dodając do skryptu następującą komendę:

 echo ${!example_array[@]} 

Dane wyjściowe będą wyglądać następująco:

 0 2 3 4 

Koncepcja ta sprawdza się również w przypadku tablic asocjacyjnych.

Usuwanie całej tablicy

Usunięcie całej tablicy jest bardzo prostym zadaniem. Można to zrobić, przekazując nazwę tablicy jako argument do funkcji „ nieoprawny ' polecenie bez określenia indeksu lub klucza.

Przykład

 #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} 

Wyjście

Tablica Basha

Próba wydrukowania zawartości powyższego skryptu nie spowoduje żadnych wyników. Zwracany jest pusty wynik, ponieważ tablica już nie istnieje.

Elementy tablicy plasterków

Tablice Bash można również ciąć od danego indeksu początkowego do indeksu końcowego.

Aby podzielić tablicę od indeksu początkowego „m” do indeksu końcowego „n”, możemy zastosować następującą składnię:

 SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) 

Przykład

 #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done 

Wyjście

Tablica Basha