지니의 따듯한 공간
배열 [Array] 본문
대부분의 프로그래밍 언어에서 제공하는 배열에 대해 알아보자.
배열이란 연속적으로 할당된 기억공간으로 여러 데이터를 저장하기위해 사용된다.
쉘에 서 배열을 생성하는 방법은 다음과 같다.
배열에 값을 할당하는 방법은 두가지가 있다.
첫번째는 배열의 각 원소에 다음과 같이 값을 할당한다.
두 번째 방법은 아래와 같이 배열 이름에 여러개의 값을 할당하는 것
배열 원소의 값을 출력하려면 아래와 같이 중괄호({})를 이용한 변수 확장을 하면된다.
원소를 확인 할 때에는 중괄호 확장을 반드시 해 주어야 한다.
보통은 우리가 알다시피 days= ( 인자, 인자, 인자) 이런식으로 하는게 보편적이다.
C언어 에서와는 다르게 {}로 배열의 값을 넣는 것이 아니라, () 로 값을 넣는 점을 주의 하자
쉘 만이 가지고있는 특징.
쉘에서는 배열의 특정 인덱스에만 값을 할당하는 것이 가능하다.
-> 인덱스 값을 함께 사용하면 인덱스로 나열된 원소만 값을 할당받고,
나머지 원소는 널(null) 값을 가진다.
배열 연산에는 배열의 모든 원소 출력, 원소 수 확인, 첨자 검색, 원소 추가, 배열 삭제
등이 있다. 배열의 각 연산을 예와 함께 알아보자.
다음은 배열의 모든 원소를 출력하는 변수 확장의 예이다.
"@" : "유지하면서 단어 별로 토큰링
"$" : 모든것이 하나의 문자열로 출력
$, @ : 전부 다 모아서, 공백 단위로 토큰링해서 출력
당연히 "@"이 가장 실용적이겠죠? ㅎ.ㅎ
${animals[*]}는 배열의 모든 원소 값을 토큰 단위로 분할 하여 6개의 단어 목록으로 확장된다.
${animals[@]}는 ${animals[*]}와 동일하게 배열의 모든 원소 값을 토큰 단
위로 분할 하여 6개의 단어 목록으로 확장된다.
“${animals[*]}”는 배열의 모든 원소 값을 하나의 문자열로 통합하여 1개의 단어 목록으로 확장된다.
“${animals[@]}”는 배열의 모든 원소 값을 각각의 문자열로 단위로 확장하여 3개의 단어 목록으로 확장된다.
따라서, 쌍따옴표를 포함하는 문자열 배열의 경우
배열의 모든 원소로 확장하고자 할 때에는 “${animals[@]}”를 사용하는 것이 일반적이다.
배열의 모든 원소 수를 출력하고자 하면
${#array_name[*]}나 ${#array_name[@]}를 사용하면된다.
이와 달리 ${#array_name[i]}는 i번째 원소(array_name[i]) 값의 길이(문 자열의 길이)로 확장된다.
앞 장에서 나왔듯이 #은 인덱스의 갯수를 나타낸다.
*나 @이면 전체 인덱스의 갯수를 출력하고,
[i] , 임의의 숫자를 적으면 그 인덱스에 해당하는 값의 길이를 나타낸다.
위에는 *랑 @라서 총 원소의 길이
3개라서 3 == 3
5 5 6 은 해당하는 인덱스의 값의 길이라서 5, 5, 6
또하나의 쉘 배열의 특징!
값을 가지고 있는 원소(= 첨자)들의 인덱스 값을 출력 할수있다.
!를 쓰면 값이 있는 인덱스를 출력
배열에서 값이 할당된 모든 원소의 첨자로 확장하고자 할 땐
${!array_name[*]}나 ${!array_name[@]}를 사용한다.
기존 배열의 끝에 원소를 추가하고자 할 때에는 배열의 이름에 += 연산자를 이용하여 원소 값을 추가한다.
배열 전체나 배열의 특정 원소를 삭제하고 할 때에는 unset 명령어를 이용한다.
배열을 그냥 삭제할때는
해당하는 인덱스만 삭제 할때는 ' ' 인용을 반드시 해 주어야 한다.
추가 실습
1. 정수목록을 명령라인 인자로 전달받아 최대값과 최소값을 출력
예) intlist 20 90 30 70 40 60 10 50
최소값 = 10
최대값 = 90
2. 1000이하의 모든 소스를 출력
조건) isPrime()함수 작성 : 명령라인 전달값이 소수이면 0 반환, 아니면 1 반환
예) isPrime2 ==> return 0, isPrime9 ==> return 1
결과
2 3 5 7 11 13 17 .... (1줄에 10개씩 출력)
소수: 1과 자신 이외의 숫자로 나누어 떨어지지 않는 숫자
'Network > Linux' 카테고리의 다른 글
위치매개변수 (0) | 2019.06.19 |
---|---|
반복문 (0) | 2019.06.14 |
키보드 입력과 다중 선택 (0) | 2019.06.12 |
ACL [ Access Control List ] (0) | 2019.05.31 |
정규 표현식 (0) | 2019.05.29 |