테스트
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 코딩하실까?.?