놀랍게도 쉘 스크립트에서 함수 내에 사용하는 return
의 기본 용도는 함수의 종료 코드 반환입니다.
쉘 스크립트 내에 비정상적인 종료를 알아보기 위해 종료 코드를 조회할 수 있는데, 0
이 아닌 종료 코드가 발생했을 때 이것이 함수 내에서 발생한 오류인지 함수 밖에서 발생한 오류인지 구분할 수 없습니다.
아래 예를 통해 확인해봅시다.
$ cat test.sh
#!/bin/bash
function func1 {
ls badfile
}
echo 'hi'
func1
echo "$?"
$ ./test.sh
hi
ls: cannot access 'badfile': No such file or directory
2
$?
를 통해 본 스크립트의 종료 코드를 출력해보았습니다.
0
이 아닌 종료 코드가 발생해서 어디선가 문제가 생긴 것은 알겠는데, 출력창만 봐서는 함수 내의 문제인지 함수 외의 문제인지 판별할 수 없습니다.
$ cat test.sh
#!/bin/bash
function func1 {
ls badfile
}
func1
echo 'hi'
echo "$?"
$ ./test.sh
ls: cannot access 'badfile': No such file or directory
hi
0
스크립트의 func1
줄과 echo 'hi'
줄의 위치를 바꿔보았습니다.
종료 코드는 0
이 출력되었습니다.
즉, 종료되기 직전에 명령이 성공했냐 실패했냐의 여부로 종료 코드가 출력되는 것을 확인할 수 있습니다.
이렇게 해서는 함수 내에서 문제가 발생했을 때 정확한 종료 코드를 확인하기 어렵습니다.
return
을 활용하면 함수의 종료 코드를 임의로 0~255
사이의 값으로 나타낼 수 있습니다.
$ cat test.sh
#!/bin/bash
function func1 {
read -p "Enter a value: " value
return $value
}
func1
echo "$?"
$ ./test.sh
Enter a value: 4000
160
return
을 이용하는 함수를 단순히 호출한 뒤 종료 코드
를 실행하면 해당 return
값을 256
으로 나눈 나머지
값을 출력합니다.
이렇게 return
을 이용해서 해당 함수의 종료 코드를 임의로 설정하여 해당 종료 코드가 발생한다면 그 종료 코드와 연결되는 함수에서 문제가 발생했다는 것을 인지할 수 있게 됩니다.