이 주제에서는 bash 배열의 기본 사항과 이것이 bash 쉘 스크립팅에서 사용되는 방법을 보여줍니다.
배열은 유사한 유형의 요소 모음으로 정의할 수 있습니다. 대부분의 프로그래밍 언어와 달리 Bash 스크립팅의 배열은 유사한 요소의 모음일 필요는 없습니다. Bash는 문자열과 숫자를 구별하지 않기 때문에 배열에는 문자열과 숫자가 모두 포함될 수 있습니다.
Bash는 다차원 배열을 지원하지 않습니다. 우리는 그 자체로 배열인 요소를 가질 수 없습니다. Bash는 1차원 숫자 인덱스 배열과 연관 배열을 지원합니다. 마지막부터 숫자로 인덱스된 배열에 액세스하려면 음수 인덱스를 사용할 수 있습니다. 인덱스 '-1'은 마지막 요소에 대한 참조로 간주됩니다. 배열에서 여러 요소를 사용할 수 있습니다.
Bash 배열 선언
Bash의 배열은 다음과 같은 방법으로 선언할 수 있습니다:
숫자 인덱스 배열 만들기
변수를 선언하지 않고도 인덱스 배열로 사용할 수 있습니다.
변수를 Bash 배열로 명시적으로 선언하려면 'declare' 키워드를 사용하고 구문은 다음과 같이 정의할 수 있습니다.
declare -a ARRAY_NAME
어디,
ARRAY_NAME은 배열에 할당할 이름을 나타냅니다.
메모:Bash에서 변수 이름을 지정하는 규칙은 배열 이름을 지정할 때와 동일합니다.
인덱스 배열을 생성하는 일반적인 방법은 다음 형식으로 정의할 수 있습니다.
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n
여기서 키워드 'index'는 양의 정수를 정의하는 데 사용됩니다.
연관 배열 만들기
숫자로 인덱스된 배열과 달리 연관 배열은 먼저 선언됩니다. 'declare' 키워드와 -A(대문자) 옵션을 사용하여 연관 배열을 선언할 수 있습니다. 구문은 다음과 같이 정의할 수 있습니다.
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
여기서 index_는 문자열을 정의하는 데 사용됩니다.
위의 형식을 다음과 같은 방법으로 작성할 수도 있습니다.
인터넷의 단점
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Bash 어레이 초기화
Bash 배열을 초기화하려면 아래와 같이 공백으로 구분된 괄호 안에 요소 목록을 지정하여 할당 연산자(=)를 사용할 수 있습니다.
ARRAY_NAME=(element_1st element_2nd element_Nth)
메모:여기서 첫 번째 요소의 인덱스는 0입니다. 또한 할당 연산자(=) 주위에는 공백이 없어야 합니다.
Bash 배열의 액세스 요소
Bash 배열의 요소에 액세스하려면 다음 구문을 사용할 수 있습니다.
베이스밴드 대 광대역
echo ${ARRAY_NAME[2]}
Bash 배열 인쇄
'-p' 옵션과 함께 'declare' 키워드를 사용하면 모든 인덱스와 세부 정보가 포함된 Bash 배열의 모든 요소를 인쇄할 수 있습니다. Bash 배열을 인쇄하는 구문은 다음과 같이 정의할 수 있습니다.
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
@와 * 사용의 유일한 차이점은 @를 사용할 때 양식을 큰따옴표로 묶는다는 것입니다. 첫 번째 경우(@를 사용하는 동안) 확장은 배열의 각 요소에 대한 단어로 결과를 제공합니다. 'for 루프'를 사용하면 더 잘 설명할 수 있습니다. '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
배열을 통해 반복
배열의 각 항목을 반복하는 일반적인 방법은 'for 루프'를 사용하는 것입니다.
예
#!/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
산출
배열을 반복하는 또 다른 일반적인 방법은 배열의 길이를 검색하고 C 스타일 루프를 사용하는 것입니다.
배시 스크립트
#!/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};>
예
#!/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[@]}'
산출
Java Python PHP HTML JavaScript
배열에 새 요소를 추가하는 또 다른 방법은 += 연산자를 사용하는 것입니다. 이 메서드에서는 인덱스를 지정할 필요가 없습니다. 다음 방법을 사용하여 배열에 하나 이상의 요소를 추가할 수 있습니다.
예
#!/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[@]}'
산출
Java Python PHP JavaScript CSS SQL
배열 요소 업데이트
인덱스 값으로 기존 배열에 새 값을 할당하여 배열 요소를 업데이트할 수 있습니다. 인덱스 4의 배열 요소를 'Javatpoint' 요소로 변경해 보겠습니다.
예
#!/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[@]}
산출
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
산출
Java HTML CSS JavaScript
여기서는 'Java', 'Python', 'HTML', 'CSS' 및 'JavaScript'의 5개 요소로 구성된 간단한 배열을 만들었습니다. 그런 다음 'unset'을 사용하고 해당 인덱스를 참조하여 배열에서 'Python' 요소를 제거했습니다. bash 배열은 0부터 시작하므로 'Python' 요소의 인덱스는 '1'이었습니다. 요소를 제거한 후 배열의 인덱스를 확인하면 제거된 요소의 인덱스가 누락된 것을 확인할 수 있습니다. 스크립트에 다음 명령을 추가하여 인덱스를 확인할 수 있습니다.
echo ${!example_array[@]}
출력은 다음과 같습니다.
0 2 3 4
이 개념은 연관 배열에도 적용됩니다.
전체 어레이 삭제
전체 배열을 삭제하는 것은 매우 간단한 작업입니다. 배열 이름을 인수로 '에 전달하여 수행할 수 있습니다. 설정되지 않음 ' 인덱스나 키를 지정하지 않고 명령을 실행합니다.
예
#!/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[@]}
산출
위 스크립트의 내용을 인쇄하려고 하면 출력이 없습니다. 배열이 더 이상 존재하지 않기 때문에 빈 결과가 반환됩니다.
자바에서 arraylist 정렬
슬라이스 배열 요소
Bash 배열은 주어진 시작 인덱스에서 종료 인덱스까지 분할될 수도 있습니다.
시작 인덱스 'm'에서 끝 인덱스 'n'까지 배열을 분할하려면 다음 구문을 사용할 수 있습니다.
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
예
#!/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
산출
${length};>