본문 바로가기
리눅스 (Linux)

배열

by 멸치김밥 2021. 12. 20.

아래는 쉘 스크립트에서 배열 선언하는 방법이다

변수를 정하고 배열을 소괄호로 감싸 변수에 넣는다

배열간에는 공백' '으로 구분한다.

#!/bin/bash
# array.sh
five=5
array=(1 "이" "삼" 4444 $five)
echo $array
1
echo ${array[]}
./array.sh: line 3: ${array[]}: bad substitution
echo ${array[*]}
1 이 삼 4444 5
echo ${array[2]}
삼

$array 는 배열을 불러올 때 그냥 변수만 불러올경우 가장 처음에 있는 인덱스0의 값만 가져오게 되어 1이 나왔다

${array[]} 이런식으로는 사용할 수 없어서 오류가 나왔다.
${array[*]} 배열 안의 모든값을 가져온다
$array[0] 인덱스0 에 해당하는 1이 나와야 하겠지만 이렇게 쓸 경우 [0] 까지 인식하지 못하기 때문에

            아래 ${array[2]}처럼 중괄호로 감싸야 한다
${array[2]} 인덱스2 에 해당하는 '삼' 이 출력되었다.


  • ksh

ksh는 내가 사용중인 bash와는 다르게 배열을 만들 때 set 이라는 명령어를 사용한다.

#!/bin/ksh
# ksh_array.sh
set -A array "안녕1" 123 "김치"
echo $array
echo ${array[*]}
echo ${array[2]}
$ ksh ksh_array.sh
안녕1
안녕1 123 김치
김치

  • 배열에 명령 실행 결과 담기

특정 명령들은 실행 결과에 띄어쓰기(공백)가 있는 경우가 있다.

그것을 변수에 담으면 띄어쓰기를 배열을 구분하는것으로 인식해서인지 배열로 이용할 수 있다.

$ uname -a
Linux DESKTOP-35AKT6L 4.4.0-19041-Microsoft #1237-Microsoft Sat Sep 11 14:32:00 PST 2021 x86_64 x86_64 x86_64 GNU/Linux
$ date
Tue Dec 21 23:47:25 KST 2021

위와같은 명령어들의 결과를 보면 띄어쓰기가 들어있다. 이것을 변수에 담아서 특정 인덱스를 출력해보면

#!/bin/bash
# array.sh
TODAY=($(date))
echo ${TODAY[3]}

INFO=($(uname -a))
echo ${INFO[4]}
$ ./array.sh
23:47:25
Sat

이렇게 일부분을 가져올 수 있다.


  • 기존 배열에 추가하기

이미 만들어진 배열에 추가로 값을 넣을 수 있다.

#!/bin/bash
# food_array.sh

kim_array=("김치" "참치" "햄버거")
lee_array=("멸치 꽁치")
taste="맛있다 맛있어"
kim_array+=($lee_array)
kim_array+=($taste)

echo ${kim_array[*]}
echo ${kim_array[0]}
echo ${kim_array[1]}
echo ${kim_array[2]}
echo ${kim_array[3]}
echo ${kim_array[4]}
echo ${kim_array[5]}
echo ${kim_array[6]}
$ ./food_array.sh
김치 참치 햄버거
김치 참치 햄버거 멸치 꽁치
김치 참치 햄버거 멸치 꽁치 맛있다 맛있어
김치
참치
햄버거
멸치
꽁치
맛있다
맛있어

이렇게 +=하고 추가할 것을 입력해주면 되는데 추가할 값을 소괄호( )로 감싸주어야 뒤에서부터 차곡차곡 배열로 들어간다.

만약 감싸주지 않으면 인덱스0 자리에 하나의 문자열로 들어가버리게 된다.

아래는 소괄호를 넣지 않은 경우이다

#!/bin/bash
# food_array.sh

kim_array=("김치" "참치" "햄버거")
lee_array=("멸치 꽁치")
taste="맛있다 맛있어"
kim_array+=$lee_array
kim_array+=$taste

echo ${kim_array[*]}
echo ${kim_array[0]}
echo ${kim_array[1]}
echo ${kim_array[2]}
echo ${kim_array[3]}
echo ${kim_array[4]}
echo ${kim_array[5]}
echo ${kim_array[6]}
$ ./food_array.sh
김치멸치 꽁치맛있다 맛있어 참치 햄버거
김치멸치 꽁치맛있다 맛있어
참치
햄버거

이처럼 kim_array[0] 자리에 있는 '김치'문자열 바로뒤에 붙어서 들어간 것을 볼 수 있다.

kim_array[*] 전체를 출력했을 때는 kim_array[0]은 '김치멸치', kim_array[1]은 '꽁치맛있다' 처럼 보이지만

kim_array[0] 를 출력한 결과를 보면 '김치멸치 꽁치맛있다 맛있어' 이렇게 추가한 문자열이 다 합쳐져 하나의 배열이 된것이다.

그러므로 배열에 배열을 추가할 때는 소괄호( )로 잘 감싸서 넣어주어야 한다.

'리눅스 (Linux)' 카테고리의 다른 글

비교 연산자  (0) 2021.12.21
연월 입력받아 달력 출력하기  (0) 2021.12.21
리다이렉션  (0) 2021.12.19
명령어 치환 (Command Substitution)  (0) 2021.12.19
특수 변수  (0) 2021.12.19

댓글