logo

Басх Арраи

У овој теми ћемо демонстрирати основе басх низа и како се они користе у басх схелл скриптовима.

Низ се може дефинисати као колекција сличних типова елемената. За разлику од већине програмских језика, низови у басх скриптовима не морају бити колекција сличних елемената. Пошто Басх не разликује стринг од броја, низ може да садржи и низове и бројеве.

Басх не пружа подршку за вишедимензионалне низове; не можемо имати елементе који су низови у себи. Басх пружа подршку за једнодимензионалне нумерички индексиране низове као и за асоцијативне низове. Да бисмо приступили нумерички индексираном низу из последњег, можемо користити негативне индексе. Индекс '-1' ће се сматрати референцом за последњи елемент. Можемо користити неколико елемената у низу.

Декларација Басх низа

Низови у Басх-у се могу декларисати на следеће начине:

Креирање нумерички индексираних низова

Можемо користити било коју променљиву као индексирани низ без декларисања.

Да бисте експлицитно декларисали променљиву као Басх низ, користите кључну реч 'децларе' и синтакса се може дефинисати као:

 declare -a ARRAY_NAME 

где,

АРРАИ_НАМЕ означава име које бисмо доделили низу.

Белешка:Правила именовања променљиве у Басх-у су иста за именовање низа.

Општи метод за креирање индексираног низа може се дефинисати у следећем облику:

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

где се кључна реч 'индекс' користи за дефинисање позитивних целих бројева.

Креирање асоцијативних низова

За разлику од нумерички индексираних низова, асоцијативни низови се прво декларишу. Можемо да користимо кључну реч 'децларе' и опцију -А (велика слова) да прогласимо асоцијативне низове. Синтакса се може дефинисати као:

 declare -A ARRAY_NAME 

Општи метод за креирање асоцијативног низа може се дефинисати у следећем облику:

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

где се индек_ користи за дефинисање било ког стринга.

Горњи образац можемо написати и на следећи начин:

није нулл у јс
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Басх иницијализација низа

Да бисмо иницијализовали Басх низ, можемо користити оператор додељивања (=), тако што ћемо навести листу елемената унутар заграда, раздвојених размацима као што је доле:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Белешка:Овде ће први елемент имати индекс 0. Такође, не би требало да постоји размак око оператора доделе (=).

Приступите елементима Басх низа

Да бисмо приступили елементима Басх низа, можемо користити следећу синтаксу:

 echo ${ARRAY_NAME[2]} 

Принт Басх Арраи

Можемо користити кључну реч 'децларе' са опцијом '-п' да одштампамо све елементе Басх низа са свим индексима и детаљима. Синтакса за штампање Басх низа може се дефинисати као:

 declare -p ARRAY_NAME 

Операције низа

Једном када је низ додељен, можемо да извршимо неке корисне операције на њему. Можемо да прикажемо његове кључеве и вредности, као и да их изменимо додавањем или уклањањем елемената:

Референтни елементи

Да бисмо референцирали један елемент, од нас се тражи да знамо индексни број елемента. Можемо референцирати или одштампати било који елемент користећи следећу синтаксу:

 ${ARRAY_NAME[index]} 

Белешка:Витичасте заграде ${} су потребне да би се избегли оператори проширења имена датотеке у љусци.

На пример, одштампајмо елемент низа са индексом 2:

Басх Сцрипт

 #!/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]} 

Излаз

 Javatpoint 

Ако користимо @ или * уместо наведеног индекса, он ће се проширити на све чланове низа. За штампање свих елемената можемо користити следећи образац:

Басх Сцрипт

својства киселина
 #!/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[@]}' 

Излаз

 Welcome to Javatpoint 

Једина разлика између коришћења @ и * је у томе што је образац окружен двоструким наводницима док се користи @. У првом случају (док се користи @), проширење даје резултат у речи за сваки елемент низа. Може се боље описати уз помоћ 'фор петље'. Претпоставимо да имамо низ са три елемента, 'Велцоме', 'То' и 'Јаватпоинт':

 $ example_array= (Welcome to Javatpoint) 

Примена петље са @:

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

То ће дати следећи резултат:

 Welcome To Javatpoint 

Применом петље са *, добиће се један резултат који садржи све елементе низа као једну реч:

 Welcome To Javatpoint 

Важно је разумети употребу @ и * јер је корисно док користите форму за понављање кроз елементе низа.

Штампање кључева низа

Такође можемо да преузмемо и одштампамо кључеве који се користе у индексираним или асоцијативним низовима, уместо њихових одговарајућих вредности. Може се извести додавањем ! оператор испред имена низа као у наставку:

питхон __дицт__
 ${!ARRAY_NAME[index]} 

Пример

 #!/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[@]}' 

Излаз

 0 1 2 

Проналажење дужине низа

Можемо пребројати број елемената садржаних у низу користећи следећи образац:

 ${#ARRAY_NAME[@]} 

Пример

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

Излаз

 The array contains 3 elements 

Прођите кроз низ

Општи метод за понављање сваке ставке у низу је коришћење 'фор петље'.

Пример

 #!/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 

Излаз

Басх Арраи

Још један уобичајени метод за петљу кроз низ је преузимање дужине низа и коришћење петље у стилу Ц:

Басх Сцрипт

 #!/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};>

Пример

 #!/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; 

Излаз

 Java Python PHP HTML JavaScript 

Други метод за додавање новог елемента у низ је коришћење += оператора. У овој методи није потребно специфицирати индекс. Можемо додати један или више елемената у низ на следећи начин:

Пример

 #!/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; 

Излаз

 Java Python PHP JavaScript CSS SQL 

Ажурирање елемента низа

Елемент низа можемо ажурирати тако што ћемо постојећем низу доделити нову вредност према вредности индекса. Хајде да променимо елемент низа на индексу 4 са елементом 'Јаватпоинт'.

Пример

 #!/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[@]} 

Излаз

 We welcome you on Javatpoint 

Брисање елемента из низа

Ако желимо да избришемо елемент из низа, морамо знати његов индекс или кључ у случају асоцијативног низа. Елемент се може уклонити помоћу ' унсет ' команда:

 unset ARRAY_NAME[index] 

Пример је приказан у наставку да бисте боље разумели овај концепт:

Пример

 #!/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; 

Излаз

 Java HTML CSS JavaScript 

Овде смо направили једноставан низ који се састоји од пет елемената, 'Јава', 'Питхон', 'ХТМЛ', 'ЦСС' и 'ЈаваСцрипт'. Затим смо уклонили елемент 'Питхон' из низа користећи 'унсет' и упућивањем на његов индекс. Индекс елемента 'Питхон' је био '1', пошто басх низови почињу од 0. Ако проверимо индексе низа након уклањања елемента, можемо видети да недостаје индекс за уклоњени елемент. Индексе можемо проверити додавањем следеће команде у скрипту:

 echo ${!example_array[@]} 

Излаз ће изгледати овако:

 0 2 3 4 

Овај концепт функционише и за асоцијативне низове.

колико је 10 од 1 милиона

Брисање целог низа

Брисање читавог низа је врло једноставан задатак. Може се извести тако што се име низа пренесе као аргумент у ' унсет ' без навођења индекса или кључа.

Пример

 #!/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[@]} 

Излаз

Басх Арраи

Неће бити излаза ако покушамо да одштампамо садржај горње скрипте. Враћа се празан резултат јер низ више не постоји.

Елементи низа пресека

Басх низови такође могу бити исечени од датог почетног индекса до завршног индекса.

Да исечемо низ од почетног индекса 'м' до завршног индекса 'н', можемо користити следећу синтаксу:

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

Пример

 #!/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 

Излаз

Басх Арраи