모양
greet() {
local name="${1:?name required}"
echo "hi, $name"
}
greet Pippa함수는 스크립트처럼 positional arg 받음 ($1, $2, $@, $#). 함수 변수는 항상 local — 안 하면 caller scope 로 leak.
반환 값
return N 가 caller 의 $? 설정. N 은 0–255. 문자열 반환은 echo + $( ) 캡처:
upper() { echo "${1^^}"; } # bash 4+
name="$(upper hello)"scope 함정
# Bug — caller 로 tmp leak
f() { tmp=42; echo $tmp; }
tmp=hello
f # 42
echo $tmp # 42 (hello 가 아님!)
# Fix
f() { local tmp=42; echo $tmp; }함수 export
기본적으로 shell 에 정의한 함수는 자식 프로세스에게 안 보임. export -f myfunc 로 bash subshell 에 노출 (zsh 는 다름). 대부분 스크립트는 불필요.
라이브러리 스크립트
helper 를 lib.sh 에 모으고 source ./lib.sh (또는 . ./lib.sh) 로 로드. 함수가 호출 shell 에서 사용 가능. 흔한 패턴: 최상위 entry 스크립트 + 여러 라이브러리 파일을 시작에 한 번 source.