2011-11-16 35 views
6

Tôi muốn lấy tên hàm từ bên trong hàm, cho mục đích ghi nhật ký.Lấy tên hàm trong kịch bản KornShell

KornShell (ksh) chức năng:

foo() 
{ 
    echo "get_function_name some useful output" 
} 

Có bất cứ điều gì tương tự như $0, trả về tên của kịch bản trong kịch bản, nhưng thay vì cung cấp tên của một chức năng?

+0

Tắt chủ đề cho câu hỏi này: đối với bash, hãy sử dụng biến mảng [FUNCNAME] (http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193). –

Trả lời

5

Sử dụng ksh "chức năng foo ..." hình thức:

$ cat foo1 
#!/bin/ksh 
foo3() { echo "\$0=$0"; } 
function foo2 { echo "\$0=$0"; } 
foo2 
foo3 
$ ./foo1 
$0=foo2 
$0=./foo1 
9

Nếu bạn xác định chức năng với từ khóa function, sau đó $0 là tên hàm:

$ function foo { 
>  echo "$0" 
> } 
$ foo 
foo 

(Tested trong pdksh.)

+0

hoàn hảo, hoạt động tốt! những ưu/nhược điểm chính của việc sử dụng chức năng từ khóa là gì? Tại vị trí của tôi, mọi người dường như sử dụng ksh88 (khó bảo đảm), nhưng tôi không thấy một từ khóa chức năng nào trong các script – Dima

+0

@Dima: 'function' làm cho hàm này là hàm Korn, có hàm' $ 0'. Các hình thức khác tồn tại cho hệ thống V/POSIX khả năng tương thích. –

5

[...] những ưu chính/nhược điểm của việc sử dụng chức năng từ khóa là gì?

Chuyên nghiệp chính là "sắp chữ myvar = abc" bên trong hàm giờ đây là biến cục bộ, không có tác dụng phụ nào bên ngoài hàm. Điều này làm cho KSH đáng chú ý hơn cho các kịch bản lệnh shell lớn. Con chính là, có lẽ, cú pháp không phải POSIX.

Các vấn đề liên quan