Shell 프로 그래 밍 입문 부터 정통 까지 - 배열
1. 정의 배열
1. 지정 한 요소 값 을 통 해 배열 을 정의 합 니 다.
셸 에서 사용 자 는 다른 프로 그래 밍 언어 처럼 요소 값 을 통 해 배열 을 정의 할 수 있 습 니 다. 문법 은 다음 과 같 습 니 다.
array[key]=value
array 는 배열 의 이름 을 표시 하고 key 매개 변 수 는 배열 요소 의 색인 을 표시 합 니 다. 보통 정수 이 고 value 는 요소 의 값 입 니 다. 주의해 야 할 것 은 배열 의 아래 표 시 는 0 에서 시작 합 니 다.#! /usr/bin/env bash
#指定数组元素值
array[1]=hello
array[3]=world
echo "${array[1]} ${array[3]}"
Output:
$ sh test.sh
hello world
2. declare 문 구 를 통 해 배열 을 정의 합 니 다.
declare 를 사용 하여 배열 을 정의 하 는 문법 은 다음 과 같 습 니 다.
declare -a array
#! /usr/bin/env bash
#通过declare定义数组
declare -a MyArray
MyArray[0]=hello
MyArray[1]=world
echo "${MyArray[0]} ${MyArray[1]}"
Output:
$ sh test.sh
hello world
또한 셸 은 관련 배열 을 정의 할 수 있 습 니 다.
declare -A ARRAY_NAME
관련 배열 을 정의 하면 색인 을 사용자 정의 할 수 있 고 문자, 문자열 등 으로 사용 할 수 있 습 니 다.#! /usr/bin/env bash
#通过declare定义关联数组
declare -A MyArray
MyArray[sex]=man
MyArray[name]=random_w
MyArray[age]=18
echo "My name is ${MyArray[name]}, I am ${MyArray[age]} years old, and I am a ${MyArray[sex]}"
Output:
$ sh test.sh
My name is random_w, I am 18 years old, and I am a man
3. 원소 값 집합 을 통 해 배열 정의
어떤 경우 에 사용 자 는 한 번 에 배열 의 모든 요소 에 값 을 제공 해 야 할 수도 있 습 니 다. 이때 사용 자 는 요소 값 집합 형식 으로 배열 을 정의 할 수 있 습 니 다. 기본 문법 은 다음 과 같 습 니 다.
array=( v0 v1 v2 ... vn)
array 는 배열 의 이름 을 표시 하고 모든 요 소 는 빈 칸 으로 구 분 됩 니 다.#! /usr/bin/env bash
#通过集合定义数组
MyArray=(1 2 3 4)
#MyArray[@]表示MyArry的所有元素
echo "${MyArray[@]}"
Output:
$ sh test.sh
1 2 3 4
메모: 집합 을 사용 할 때 어떤 값 에 빈 칸 이 포함 되 어 있 으 면 작은 따옴표 나 작은 따옴표 로 값 을 묶 어야 합 니 다.
4. 키 값 을 통 해 정의 배열
이 방법 은 지 정 된 요소 값 을 통 해 배열 을 정의 하 는 것 과 유사 합 니 다. 문법 은 다음 과 같 습 니 다.
array=([0]=value0 [1]=value1 [2]=value2 ... [n]=value[n])
여기 서 array 5 는 배열 의 이름 이 고 등호 오른쪽 에 있 는 괄호 는 배열 요소 와 값 을 표시 합 니 다. 이런 방식 으로 배열 을 정의 하면 색인 은 연속 되 지 않 을 수 있 습 니 다.#! /usr/bin/env bash
#通过集合定义数组
MyArray=([0]=1 [2]=2 [3]=3 [4]=4)
#MyArray[@]表示MyArry的所有元素
echo "${MyArray[@]}"
Output:
$ sh test.sh
1 2 3 4
5. 배열 과 일반 변수
Shell 에서 모든 변 수 는 실제 적 으로 배열 변수 로 사용 할 수 있 습 니 다.
#! /usr/bin/env bash
#定义字符串
Str="Hello World!"
echo "${Str[0]} ${Str[@]} ${Str[*]}"
Output:
$ sh test.sh
Hello World! Hello World! Hello World!
위의 예 를 들 어 문자열 도 배열 로 사용 할 수 있 지만 이 배열 은 하나의 요소 만 있 습 니 다.
注意:符号@和*都是通配符,表示匹配的所有元素,所以我们可以使用${array[@]}或者${array[*]表示数组的所有元素。
2. 배열 의 할당
1. 색인 에 따라 요소 값 부여
색인 방식 에 따라 값 을 부여 하고 지 정 된 요소 값 을 통 해 배열 을 정의 하 는 것 은 유사 합 니 다. 문법 은 다음 과 같 습 니 다.
array[n]=Value
array 는 배열 의 이름 이 고 n 은 할당 할 요소 색인 이 며 Valuen 은 대응 하 는 요소 값 입 니 다.#! /usr/bin/env bash
#定义数组
Student=( random1 random2 random3)
echo "All Student are: ${Student[@]}"
#给数组赋值
Student[1]=hello
Student[3]=world
echo "All Student are: ${Student[@]}"
Output:
$ sh test.sh
All Student are: random1 random2 random3
All Student are: random1 hello random3 world
2. 집합 을 통 해 배열 할당
집합 을 통 해 배열 에 값 을 부여 하 는 것 과 집합 을 통 해 배열 을 정의 하 는 문법 은 같 습 니 다.
array=( v0 v1 v2 ... vn)
배열 에 값 을 제공 할 때 셸 은 첫 번 째 요소 부터 차례대로 이 값 을 모든 요소 에 부여 합 니 다. 새로운 값 의 수량 이 원래 의 배열 을 초과 할 때 셸 은 배열 의 끝 에 새로운 요 소 를 추가 합 니 다. 새로운 값 의 개수 가 원래 의 길이 보다 적 을 때.셸 은 새로운 값 을 첫 번 째 요소 부터 할당 한 다음 초과 한 요 소 를 삭제 합 니 다.#! /usr/bin/env bash
#定义数组
Student=( random1 random2 random3)
echo "All Student are: ${Student[@]}"
#给数组赋值
Student=( random_w1 random_w2 random_w3 random_w4)
echo "All Student are: ${Student[@]}"
#给数组赋值
Student=( random_w1 random_w2)
echo "All Student are: ${Student[@]}"
Output:
$ sh test.sh
All Student are: random1 random2 random3
All Student are: random_w1 random_w2 random_w3 random_w4
All Student are: random_w1 random_w2
3. 배열 끝 에 새 요 소 를 추가
셸 에 서 는 색인 을 통 해 배열 요소 에 값 을 부여 할 때 가리 키 는 색인 이 존재 하지 않 으 면 셸 은 자동 으로 새로운 요 소 를 추가 하고 배열 에 값 을 부여 합 니 다.
#! /usr/bin/env bash
#定义数组
Student=( random1 random2 random3)
echo "All Student are: ${Student[@]}"
#给数组赋值
Student[3]=random4
echo "All Student are: ${Student[@]}"
Output:
$ sh test.sh
All Student are: random1 random2 random3
All Student are: random1 random2 random3 random4
4. 순환 을 통 해 배열 에 값 을 부여 합 니 다.
실제 상황 에서 흔히 볼 수 있 는 것 은 순환 을 통 해 배열 에 값 을 부여 하 는 것 이다. 다음 과 같은 예 를 들 자.
#! /usr/bin/env bash
for i in {1..10}
do
array[$i]=$i
done
echo "${array[@]}"
Output:
$ sh test.sh
1 2 3 4 5 6 7 8 9 10
3. 방문 배열
1. 첫 번 째 배열 요소 에 접근
앞에서 말 했 듯 이 우 리 는 배열 을 통 해 문자열 을 호출 할 수 있 습 니 다. 마찬가지 로 문자열 을 호출 하 는 형식 으로 배열 의 첫 번 째 요 소 를 호출 할 수 있 습 니 다.
#! /usr/bin/env bash
array=(1 2 3 4)
echo "${array}"
Output:
$ sh test.sh
1
2. 아래 표 시 를 통 해 배열 요소 에 접근
이것 은 우리 가 앞에서 이미 사용 한 것 이다. 문법 은
array[n]
로 배열 아래 n 으로 표 시 된 요 소 를 호출 하 는 것 을 나타 낸다. 여 기 는 더 이상 예 를 들 지 않 는 다.3. 배열 의 길 이 를 계산한다.
셸 에서 우 리 는 $\# 를 사용 하여 배열 의 길 이 를 얻 을 수 있 습 니 다.이 연산 자의 기본 문법 은 다음 과 같다.
${#array[@]}
또는 ${#array[*]}
$\# 를 통 해 우 리 는 특정한 배열 요소 의 길 이 를 얻 을 수 있 습 니 다:${#array[n]}
#! /usr/bin/env bash
#给数组赋值
Student=( random_w1 random_w2 random_w3 random_w4)
echo "All Student are: ${Student[@]}, There are ${#Student[@]} students in all"
Output:
$ sh test.sh
All Student are: random_w1 random_w2 random_w3 random_w4, There are 4 students in all
4. 배열 요 소 를 반복 해서 옮 겨 다 니 기
이것 은 순환 을 통 해 배열 에 값 을 부여 하 는 역 과정 입 니 다.
#! /usr/bin/env bash
#给数组赋值
Student=( random_w1 random_w2 random_w3 random_w4)
for ((i=0;i<${#Student[@]};i++))
do
echo "Student: ${Student[$i]}"
done
Output:
$ sh test.sh
Student: random_w1
Student: random_w2
Student: random_w3
Student: random_w4
5. 모든 배열 요 소 를 참조 합 니 다.
우 리 는
{array[@]}
자 ${array[*]}
방식 으로 배열 의 모든 요 소 를 인용 할 수 있다. 앞에서 우 리 는 이미 사용 한 적 이 있 는데 여 기 는 예 를 들 지 않 는 다.6. 슬라이스 방식 으로 일부 배열 요 소 를 가 져 옵 니 다.
여기 서 말 하 는 절편 은 배열 의 일부 요소 나 특정한 요소 의 복 분 내용 을 캡 처 하 는 것 을 말한다. 예 를 들 어 특정한 배열 의 두 번 째 요 소 를 가 져 와 다섯 번 째 요 소 를 시작 하고 절편 을 가 져 오 는 문법 은 다음 과 같다.
${array[@|*]:start:length}
문법 에서 array 는 배열 의 이름 이 고 start 는 아래 표 시 된 곳 이 며 length 는 캡 처 할 길이 이다.위의 문법 을 통 해 우 리 는 문자열 을 얻 었 습 니 다. 만약 에 얻 으 려 면 양쪽 에 괄호 만 넣 으 면 됩 니 다. 예 를 들 어 (${array[@|*]:start:length})
#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
echo "${Release[@]2:3}"
Release=(${Release[@]:2:3})
for ((i=0;i<${#Release[@]};i++))
do
echo "${Release[$i]}"
done
Output:
$ sh test.sh
Suse Fedora UTS CentOS
Ubuntu
Suse
Fedora
Shell 에 서 는 배열 을 슬라이스 할 수 있 는 것 외 에 배열 의 요 소 를 슬라이스 할 수 있 습 니 다. 문법 은 다음 과 같 습 니 다.
${array[n]:start:length}
#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
#这里截取CentOS的最后两个字符
echo "${Release[6]:4:2}"
Output:
$ sh test.sh
OS
7. 배열 요소 의 교체
Shell 에서 사용 자 는 배열 요 소 를 교체 할 수 있 습 니 다. 여기 서 의 교 체 는 특정한 배열 의 일부 내용 을 다른 문자열 로 대체 하 는 것 을 말 합 니 다. 그러나 원래 배열 의 값 에 영향 을 주지 않 습 니 다. 기본 문법 은 다음 과 같 습 니 다.
${array[@|*]/pattern/replacemant}
위의 문법 에서 array 는 배열 의 이름 을 표시 하고 pattern 은 교체 할 문자열 을 표시 합 니 다.replacement 은 바 꿀 문자열 을 표시 합 니 다.#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
echo "New array: ${Release[@]/Ubuntu/random_w}"
echo "Old array: ${Release[@]}"
Output:
$ sh test.sh
New array: Debian Redhat random_w Suse Fedora UTS CentOS
Old array: Debian Redhat Ubuntu Suse Fedora UTS CentOS
4. 배열 삭제
1. 지정 한 배열 요소 삭제
다른 Shell 변 수 를 삭제 하 는 것 과 마찬가지 로, 우 리 는 unset 를 사용 하여 그룹의 요 소 를 삭제 할 수 있 습 니 다:
unset array[n]
#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
unset Release[2]
echo "New array: ${Release[@]}"
Output:
$ sh test.sh
New array: Debian Redhat Suse Fedora UTS CentOS
2. 전체 배열 삭제
마찬가지 로 우 리 는 unset 명령 을 사용 하여 배열 을 삭제 합 니 다
unset array
#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
unset Release
echo "New array: ${Release[@]}"
Output:
$ sh test.sh
New array:
5. 배열 의 기타 조작
1. 배열 복사
Shell 에서 사용 자 는 다음 과 같은 방식 으로 배열 의 할당 을 실현 할 수 있 습 니 다.
newarray=("$array[@]")
#! /usr/bin/env bash
#给数组赋值
Release=( Debian Redhat Ubuntu Suse Fedora UTS CentOS)
Release2=("${Release[@]}")
echo "Release2: ${Release2[@]}"
Output:
$ sh test.sh
Release2: Debian Redhat Ubuntu Suse Fedora UTS CentOS
2. 연결 배열
두 배열 을 연결 하 는 방식 도 간단 하 다. 문법 은 다음 과 같다.
("$array1[@]" "$array2[@]")
#! /usr/bin/env bash
#给数组赋值
Release1=( Debian Redhat Ubuntu)
Release2=( Suse Fedora UTS CentOS)
Release=("${Release1[@]}" "${Release2[@]}")
echo "Release2: ${Release[@]}"
```bash
$ sh test.sh
Release2: Debian Redhat Ubuntu Suse Fedora UTS CentOS
3. 파일 내용 을 배열 로 불 러 오기
Shell 에서 사용 자 는 일반 텍스트 의 내용 을 배열 에 직접 불 러 올 수 있 습 니 다. 파일 의 줄 마다 배열 의 요소 입 니 다.
[root@random_wz ~]# cat student.txt
random_w1
random_w2
random_w3
random_w4
#! /usr/bin/env bash
#给数组赋值
Student=(`cat "student.txt"`)
echo "Student: ${Student[@]}"
Output:
[root@random_wz ~]# sh test.sh
Student: random_w1 random_w2 random_w3 random_w4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.