我想從函數內部獲取函數名稱,用於記錄目的。在KornShell腳本中獲取函數名稱
KornShell(KSH)功能:
foo()
{
echo "get_function_name some useful output"
}
有什麼類似$0
,它返回腳本名稱腳本中,但是這反而提供了一個函數的名字?
我想從函數內部獲取函數名稱,用於記錄目的。在KornShell腳本中獲取函數名稱
KornShell(KSH)功能:
foo()
{
echo "get_function_name some useful output"
}
有什麼類似$0
,它返回腳本名稱腳本中,但是這反而提供了一個函數的名字?
使用ksh的 「函數foo ...」 的形式:
$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1
如果定義與function
關鍵字的功能,那麼$0
是函數名稱:
$ function foo {
> echo "$0"
> }
$ foo
foo
(測試中的pdksh。)
完美,工作正常!使用關鍵字函數的主要優點/缺點是什麼?在我的地方,人們似乎使用ksh88(很難說清楚),但我在腳本中沒有看到一個函數關鍵字 – Dima
@Dima:'function'使得它成爲一個Korn shell函數,它具有'$ 0'。另一種形式適用於System V/POSIX兼容性。 –
[...]什麼是使用關鍵字功能的主要優點/缺點?
主要的是,函數內部的「typeset myvar = abc」現在是一個局部變量,函數外面沒有可能的副作用。這使得KSH顯着更安全的大型shell腳本。主要的可能是非POSIX語法。
這個問題的題外話:對於bash,使用[FUNCNAME](http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193)數組變量。 –