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
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=( 'Welcome''To''Javatpoint' ) #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]='New Element' </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}' </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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}' </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's change the array element at index 4 with an element 'Javatpoint'.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, 'Java', 'Python', 'HTML', 'CSS' and 'JavaScript'. Then we removed the element 'Python' from the array by using 'unset' and referencing the index of it. The index of element 'Python' was '1', 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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #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'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 'm' to an ending index 'n', we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}') </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=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' 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=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}'
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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
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=( 'We''welcome''you''on''SSSIT' ) #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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Wyjście
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}')
Przykład
#!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done
Wyjście
${length};>