본문 바로가기
SWE/Linux

[shell] 여러 개 return 값 참조 방법 :

by S나라라2 2021. 5. 26.
반응형

테스트

list와 count를 반환하는 함수, GetListAndCount

main 함수에서 GetListAndCount 의 반환 값들을 전달받아 출력한다.

 

결론

아래 예제를 보기 전에 결론부터 정리하면, : 는 위치를 변수의 나타냄 

 

int number=1234

number:0:1 -> 1 출력, 0번째 위치부터 1번째 전 위치까지의 값

number:0:3 -> 123 출력, 0번째 위치부터 3번째 전 위치까지의 값

 

 

 

코드

#!/bin/sh

# test multiple return value of function

function GetListAndCount
{
        local list=("hello" "test" "test2" "test3" "test4" "test5" "test6" "test7" "test8" "test9")
        local cnt=${#list[@]}
        echo "${cnt}" "${list[@]}"
}

main()
{
        local info=$(GetListAndCount)
        local count=${info:0:2}
        local list=''
        list=(`echo ${info:2}`)

        echo count : ${count}
        echo -e list : ${list} "\n"

        echo info:0:20 : ${info:0:20}
        echo info:0:10 : ${info:0:10}
        echo info:0:3 : ${info:0:3}
        echo info:0:2 : ${info:0:2}
        echo -e info:0:1 : ${info:0:1} "\n"

        echo info:0 : ${info:0}
        echo info:1 : ${info:1}
        echo info:2 : ${info:2}
        echo info:3 : ${info:3}
        echo info:6 :  ${info:6}
        echo -e info:2:4 : ${info:2:4} "\n"

        echo list[0] : ${list[0]}
        echo list[1] : ${list[1]}
        echo -e list[2] : ${list[2]} "\n"
}

main

 

 

결과

$ ./test.sh
count : 10
list : hello 

info:0:20 : 10 hello test test2
info:0:10 : 10 hello t
info:0:3 : 10
info:0:2 : 10
info:0:1 : 1 

info:0 : 10 hello test test2 test3 test4 test5 test6 test7 test8 test9
info:1 : 0 hello test test2 test3 test4 test5 test6 test7 test8 test9
info:2 : hello test test2 test3 test4 test5 test6 test7 test8 test9
info:3 : hello test test2 test3 test4 test5 test6 test7 test8 test9
info:6 : lo test test2 test3 test4 test5 test6 test7 test8 test9
info:2:4 : hel 

list[0] : hello
list[1] : test
list[2] : test2 

 

결과 정리를 해보자!

GetListAndCount는 list의 개수와 list를 반환하고 있음.

 

이제부터 local info=$(GetListAndCount) 에서 info가 GetListAndCount를 가리키고 있다는 것을 알고, info를 이용해 설명해보겠음

info:0 -> GetListAndCount에서 return하는 값 중 0번째 위치부터 끝까지임

info:0:2 -> :0 뒤에 위치를 하나 더 주면(:2) 끝 위치를 알려주는 거임. 그래서 0위치부터 2위치 전까지, 즉 10 이 나옴.

info:0:5 -> 0위치부터 5위치 전까지, 즉 10 he 이 나올 것이다.

 

local list=(`echo ${info:2}`) 는 info의 2위치부터 끝까지이므로 hello test test2 test3 ... test9가 들어가게 된다.

즉 GetListAndCount의 list인 것이다.

이걸 위해 GetListAndCount에서는 count를 먼저 반환하고 그 이후에 list를 반환한 것 같다.

다들 이런 방식으로 shell 코딩하실까?.?

반응형