khai báo bi n c c b ch có hi u l c bên trong hàm, hãy dùng t khóa local. N u không có t khóa local, các bi n s đ c xem là toàn c c (global), chúng có th t n t i và l u gi k t quá ngay sau khi hàm đã ch m d t. Bi n toàn c c đ c nhìn th y và có th thay đ i b i t t c các hàm trong cùng script. Tr ng h p đã có bi n toàn c c nh ng l i khai báo bi n c c b cùng tên, bi n c c b s có giá tr u tiên và hi u l c cho đ n khi hàm ch m d t.
Ví d 3-17 function2.sh
#!/bin/sh
sample_text="global variable" foo() {
local sample_text="local variable" echo "Function foo is executing" echo $sample_text
}
echo "script starting" echo $sample_text foo
echo "script ended" echo $sample_text exit 0
33 K t q a k t xu t
$./function2.sh script starting global variable
Function foo is executing
local variable #sample_text is local in function
script ended
global variable #sample_text is global outside the function
Hàm có th tr v m t giá tr . tr v giá tr s , b n có th dùng l nh return. Ví d :
foo( ) { …
return 0
}
trá v giá tr chu i, b n có th dùng l nh echo và chuy n h ng n i đung k t xu t c a hàm khi g i nh sau:
foo() {
echo "string value" }
. . .
x= $ ( foo )
Bi n x s nh n tr tr v c a hàm foo() là "string value". $() là cách l y v n i dung c a m t l nh. Có m t cách khác đ l y tr tr v c a hàm, đó là s đ ng bi n toàn c c (do bi n toàn c c v n l u l i tr ngay c khi h m ch m d t). Các script trong ch ng trình
ng d ng cu i ch ng s s d ng đ n k thu t này.