logo

Bash 스크립팅 – 어레이

배열 프로그래밍이나 스크립팅에서 중요한 개념입니다. 배열을 사용하면 특정 작업에 사용할 수 있는 목록 형식으로 요소를 저장하고 검색할 수 있습니다. Bash에는 목록 형식으로 데이터를 저장하기 위해 명령줄에서 스크립트를 만드는 데 도움이 되는 배열도 있습니다. 이 글에서는 bash 스크립팅의 배열 기본 사항을 이해합니다.

배열 만들기

Bash 스크립트에서 기본 배열을 생성하려면 선언을 사용할 수 있습니다. -ㅏ 명령 다음에 제공하려는 배열 변수의 이름이 옵니다.



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball )>

또는

#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball>

요소의 값은 정수, 문자열 또는 원하는 다른 형태의 데이터일 수 있습니다. 배열이 bash 스크립트에서 두 가지 방식으로 선언되는 것을 볼 수 있습니다. 전자는 선언하기에 더 편리하고 덜 복잡해 보입니다. 한 번에 배열을 선언하려면 전자가 최적의 선택이지만 요소를 조금씩 추가해야 한다면 후자가 좋은 선택입니다.

배열 인쇄

배열을 선언한 후 배열의 모든 요소를 ​​표시하려면 @ 기호를 사용할 수 있습니다.



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}'>

echo '${array_name[@]}'>

[@]를 배열의 인덱스로 사용하여 모든 요소를 ​​표시합니다. 모든 요소는 공백으로 구분되어 인쇄됩니다. 변수 주변의 따옴표는 배열의 모든 요소를 ​​확장하여 인쇄합니다.

배열 반복

한 번에 한 요소씩 배열을 반복하려면 루프를 사용하고 배열 본문 내에서 모든 작업을 수행할 수 있습니다.



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done>

보시다시피 for 루프를 사용하여 배열의 요소를 하나씩 인쇄했습니다. 우리는 배열의 모든 요소를 ​​가져오고 for 루프에서 하나씩 반복하는 이전 섹션의 트릭을 사용했습니다. ${array_name[@]}은 배열의 모든 요소로 확장되고 for 루프는 예제의 반복자를 사용하여 하나씩 반복합니다. 변수 나는 , for 루프의 본문 내부에 다음을 인쇄합니다. 변수/반복자 i 따라서 배열을 반복합니다.

배열의 요소 수를 가져옵니다.

배열 요소 수를 가져오려면 ${array_name[@]}의 s에 있는 배열 이름 앞에 # 연산자를 사용할 수 있습니다.

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}'>

따라서 다음 명령을 사용하여 배열의 크기를 반환합니다. ${#스포츠[@]}, #은 옆에 있는 변수의 크기를 가져오는 데 사용되며, 큰따옴표를 사용하여 명령 값이 평가되고 원하는 대로 배열의 요소 수를 가져옵니다.

배열에 요소 삽입

요소를 삽입하는 것은 매우 간단합니다. 요소의 적절한 인덱스와 제공하려는 요소의 값을 설정해야 합니다.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}'>

5번째 요소(4번째 인덱스)를 배열에 추가하고, 배열의 3번째 요소(2번째 인덱스)도 수정/편집했습니다. 그만큼 배열 이름[색인]=값 배열의 요소를 추가, 수정 또는 초기화하는 모든 트릭입니다.

+= 연산자를 사용하여 배열에 요소를 추가할 수도 있습니다.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}'>

예제에서 볼 수 있듯이 최소한의 코드로 배열에 여러 요소를 추가할 수 있습니다. array_name+=(elements)를 사용하여 배열에 요소를 추가합니다.

배열에서 요소 삭제

배열에서 요소를 삭제하려면 unset 명령을 사용할 수 있습니다. 이 명령은 우리의 경우 배열 이름과 해당 요소의 인덱스를 변수 이름으로 사용합니다. 인덱스는 상대적일 수도 있습니다. 즉, -1은 마지막 요소를 나타내고 -2는 마지막 두 번째 요소를 나타내는 식입니다.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}'>

보시다시피 unset arrayname[index] 는 배열의 인덱스에 있는 요소를 삭제합니다. 또한 배열의 크기가 4에서 3으로 줄었습니다. 이는 요소가 공백으로 대체되지 않고 완전히 제거되었음을 나타냅니다.

상대 인덱스 사용

-1, -2 등과 같은 인덱스를 사용하면 마지막 요소부터 요소를 참조하므로 뒤에서부터 상대 순서로 삭제하거나 수정할 수도 있습니다.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}'>

보시다시피 인덱스 1은 뒤에서 -3으로도 참조되므로 큰 배열의 특정 요소를 참조하는 것이 상대적으로 쉬워집니다.

어레이 연결

배열을 연결(물약 꺼내기)하여 다른 변수/배열에 할당하거나 인쇄할 수 있습니다.

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}'>

우리는 스포츠 배열에서 덩어리(즉, 인덱스 1과 3 사이의 요소)를 꺼내어 배열이기도 한 arr 변수에 할당했습니다. @ 연산자는 배열에서 모든 요소를 ​​가져온 다음 인덱스 1과 3 사이에 배열을 연결하여 스포츠 배열의 1, 2, 3(크리켓, 하키, 야구) 요소를 갖게 됩니다.

정적 배열을 정의하고 배열 요소를 인쇄합니다.

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$>

2가지 방법으로 정적 배열 요소를 인쇄할 수 있습니다.

프로그램 실행

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here>

스크립트 파일에 명령줄 인수 전달

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]}>

위 스크립트는 다음과 같이 실행될 수 있습니다.

# 여기서 Java, Python 및 Ruby는 명령줄 인수입니다.

BFS 알고리즘
sh arrayCheck.sh Java Python Ruby>

스크립트 실행 단계:

프로그래밍 배열=(자바 파이썬 루비)

#Java는 0번째 인덱스에 존재하며 크기는 아래 방법으로 계산할 수 있습니다.

${#programmingArray[0]}

마찬가지로 Python은 첫 번째 인덱스에 존재하며 크기는 아래 방법으로 계산할 수 있습니다.

${#programmingArray[1]}

산출:

for 루프를 사용하여 배열 값 반복

$@는 명령줄 인수를 통해 전달된 모든 값을 제공하며 배열에 저장됩니다.

for 루프를 사용하여 반복 가능

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done>

산출:

각 기호가 무엇을 나타내는지 간단히 살펴보겠습니다.

통사론

산출
도착=()

arr[0]=3 첫 번째 요소 덮어쓰기

arr+=(4) 값 추가

str=$(ls) ls 출력을 문자열로 저장

arr=( $(ls) ) ls 출력을 파일 배열로 저장

${arr[@]:s:n} 인덱스에서 시작하여 n 요소 검색

#우리는 일련의 가치를 제공할 수 있습니다

이와 같이

arr=(하나 둘 셋)

배열을 초기화하려면
${arr[0]} 첫 번째 요소를 검색합니다. 인덱스는 항상 0으로 시작합니다.
${arr[@]} 모든 요소를 ​​검색하기 위해 루프에서 반복할 수 있습니다.
${!arr[@]} 배열 인덱스만 검색하려면
${#arr[@]} 배열의 크기를 계산하려면
도착[2]=3 세 번째 요소를 덮어쓰려면 이 방법을 사용해야 합니다. 인덱스가 0부터 시작하므로 arr[2]가 맞습니다.
도착+=(40) 값을 추가하려면 +를 사용한 다음 =로 할당하면 +=가 사용됩니다.
str=$(ls) ls 명령 출력을 문자열로 저장하려면(이 출력에 대한 예 4가 표시됨)
도착=( $(ls) ) ls 출력을 파일 배열로 저장하려면(이 출력에 대한 예 5가 표시됨)
${arr[@]:s:n} 인덱스 s에서 시작하여 n개의 요소를 검색하려면