배열 개념이 없는 프로그래밍 언어는 상상할 수 없습니다. 다양한 언어에서 구현되는 방식은 중요하지 않습니다. 대신 배열은 유사하거나 다른 데이터를 하나의 상징적 이름으로 통합하는 데 도움이 됩니다.
여기에서 쉘 스크립팅에 대해 우려하고 있으므로 이 기사는 이러한 배열 개념을 사용하는 일부 쉘 스크립트를 사용하는 데 도움이 될 것입니다.
최신 버전의 bash에서는 1차원 배열을 지원합니다. 배열은 명시적으로 선언될 수 있습니다. 선언하다 쉘 내장.
선언 -a var
그러나 위와 같이 배열 변수를 선언할 필요는 없습니다. 다음과 같이 개별 요소를 배열에 직접 삽입할 수 있습니다.
변수[XX]=
여기서 'XX'는 배열 인덱스를 나타냅니다. 배열 요소를 역참조하려면 중괄호 구문을 사용하십시오.
${var[XX]}
메모: 배열 인덱싱은 항상 0부터 시작합니다.
전체 배열을 초기화하는 또 다른 편리한 방법은 아래와 같이 괄호 쌍을 사용하는 것입니다.
var=(요소1 요소2 요소3... 요소N )
배열에 값을 할당하는 또 다른 방법이 있습니다. 이 초기화 방법은 이전에 설명한 방법의 하위 범주입니다.
배열=([XX]=[XX]= ... )
실행 시간 동안 배열에 값을 읽거나 할당할 수도 있습니다. 읽다 쉘 내장.
-a 배열을 읽습니다.
이제 스크립트 내에서 위의 명령문을 실행하면 일부 입력을 기다립니다. 공백으로 구분된 배열 요소를 제공해야 합니다(캐리지 리턴이 아님). 값을 입력한 후 엔터를 눌러 종료합니다.
배열 요소를 순회하기 위해 for 루프를 사용할 수도 있습니다.
"${array[@]}"의 i에 대해 $i로 각 요소에 #access를 수행하십시오.. 완료
다음 스크립트는 이 특정 섹션의 내용을 요약합니다.
#!/bin/bash array1[0]=one array1[1]=1 echo ${array1[0]} echo ${array1[1]} array2=( one two three ) echo ${array2[0]} echo ${array2[2]} array3=( [9]=nine [11]=11 ) echo ${array3[9]} echo ${array3[11]} read -a array4 for i in "${array4[@ ]}" 에코 $i 0번 출구 완료.
많은 표준 문자열 연산이 배열에서 작동합니다. 배열에 대한 일부 작업(문자열 작업 포함)을 구현하는 다음 샘플 스크립트를 살펴보세요.
#!/bin/bash array=( 사과 박쥐 고양이 개 코끼리 개구리 ) #첫 번째 요소를 인쇄합니다 echo ${array[0]} echo ${array: 0} #모든 요소를 표시합니다 echo ${array[@]} echo ${array[@]:0} #첫 번째 요소를 제외한 모든 요소 표시 echo ${array[@]:1} #범위의 요소 표시 echo ${array[@]:1: 4} #길이 첫 번째 요소 echo ${#array[0]} echo ${#array} #요소 수 echo ${#array[*]} echo ${#array[@]} #부분 문자열 교체 echo ${array[@]//a/A} 0번 출구.
다음은 위의 스크립트를 실행할 때 생성되는 출력입니다.
사과 사과 사과 박쥐 고양이 개 코끼리 개구리 사과 박쥐 고양이 개 코끼리 개구리 박쥐 고양이 개 코끼리 개구리 박쥐 고양이 개 코끼리 5 5 6 6 사과 박쥐 고양이 개 elephAnt 개구리.
위의 스크립트는 자명하기 때문에 자세히 설명하는 것은 의미가 없다고 생각합니다. 필요한 경우 이 시리즈의 한 부분을 문자열 조작에만 할애할 것입니다.
명령 대체는 명령 또는 여러 명령의 출력을 다른 컨텍스트에 할당합니다. 여기 배열의 컨텍스트에서 명령의 출력을 배열의 개별 요소로 삽입할 수 있습니다. 구문은 다음과 같습니다.
배열=( $(명령) )
기본적으로 공백으로 구분된 명령 출력의 내용은 개별 요소로 배열에 연결됩니다. 다음 스크립트는 755 권한이 있는 파일인 디렉토리의 내용을 나열합니다.
#!/bin/bash ERR=27 EXT=0 if [ $# -ne 1 ]; 그런 다음 echo "사용: $0" $ERR fi를 종료하면 [! -d $1 ]; then echo "$1 디렉토리가 존재하지 않습니다" exit $ERR fi temp=( $(find $1 -maxdepth 1 -type f) ) for i in "${temp[@]}" do perm=$(ls -l $ i) if [ `expr ${perm: 0:10}: "-rwxr-xr-x"` -eq 10 ]; 그런 다음 echo ${i##*/} fi 완료 $EXT 종료.
1차원 배열을 사용하여 2차원 행렬을 쉽게 나타낼 수 있습니다. 입력 행 주 순서 행렬의 각 행에 있는 표현 요소는 순차적 방식으로 배열 인덱스에 점진적으로 저장됩니다. mXn 행렬에 대한 공식은 다음과 같이 쓸 수 있습니다.
행렬[i][j]=배열[n*i+j]
2개의 행렬을 추가하고 결과 행렬을 인쇄하는 다른 샘플 스크립트를 살펴보세요.
#!/bin/bash read -p "행렬 순서 입력 [mxn]: " tm=${t: 0:1} n=${t: 2:1} echo "첫 번째 행렬의 요소를 입력하세요" for i `seq 0 $(($m-1))`에서 `seq 0 $(($n-1))`에서 j에 대해 수행 읽기 x[$(($n*$i+$j))] done done echo "두 번째 행렬의 요소를 입력하세요." for i in `seq 0 $(($m-1))` do for j in `seq 0 $ (($n-1))` 읽기 y[$(($n*$i+$j))] z[$(($n*$i+$j))]=$((${x[$(($n*$i+$j))]}+${y[$(($n*$i+ $j))]})) done done echo "추가 후 행렬은 다음과 같습니다." for i in `seq 0 $(($m-1))` do for j in `seq 0 $(($n-1))` 에코 -ne를 수행 "${z[$(($n*$i+$j))]}\t" 완료 echo -e "\n" 종료 0 종료
셸 스크립팅 내에서 배열을 구현하는 데 제한이 있지만 특히 명령 대체로 처리할 때 소수의 상황에서 유용합니다. 관리적 관점에서 보면 배열의 개념은 GNU/Linux 시스템에서 많은 배경 스크립트를 개발할 수 있는 길을 열었습니다.