linux shell 指令碼 獲取當前函式名

2021-10-04 12:10:08 字數 1358 閱讀 1572

linux bash shell 中

$funcname 得到當前函式名

$ 得到上一層函式名 如果上層沒有函式呼叫 則為空

在c/c++中,__function__常量記錄當前函式的名稱。有時候,在日誌輸出的時候包含這些資訊是非常有用的。而在bash中,同樣有這樣乙個常量funcname,但是有一點區別是,它是乙個陣列而非字串,其中陣列的第乙個元素為當前函式的名稱。

可能初看有點難以理解,為什麼funcname要是乙個陣列呢?看看下面的例子,你就明白了。

#!/bin/bash

function test_func()

)" another_func

echo "current $funcname, \$funcname => ($)"

}function another_func())"}

echo "out of function, \$funcname => ($)"

test_func

echo "out of function, \$funcname => ($)"

執行後的結果為:

out of function, $funcname => ()

current test_func, $funcname => (test_func main)

current another_func, $funcname => (another_func test_func main)

current test_func, $funcname => (test_func main)

out of function, $funcname => ()

所以,更加準確地說,funcname是乙個陣列,但是bash中會將它維護成類似乙個堆疊的形式。

與funcname相似的另外乙個比較有用的常量是bash_source,同樣是乙個陣列,不過它的第乙個元素是當前指令碼的名稱。

這在source的時候非常有用,因為在被source的指令碼中,$0是父指令碼的名稱,而不是被source的指令碼名稱。而bash_source

就可以派上用場了。

# if the script is sourced by another script

if [ -n "$bash_source" -a "$bash_source" != "$0" ]

then

do_something

else # otherwise, run directly in the shell

do_other

fi

唯一遺憾的是,這種做法會讓指令碼失去一些可移植性,因為不是所有的shell都支援這些常量。

Linux Shell指令碼基礎

shell指令碼在處理自動迴圈或大的任務方面可節省大量時間,且功能強大。任何指令碼都可能有注釋,加注釋需要此行的第乙個字元為 直譯器對此行不予解釋。指令碼不是複雜的程式,它是按行解釋的。指令碼第一行總是以 bin sh開始,這段指令碼通知shell使用系統上的 bourne shell直譯器。指令碼...

linux shell指令碼犯錯

指令碼裡犯了錯 oracle it shell value 1 oracle it shell value 1 bash value command not found oracle it shell value 3 bash value command not found oracle it sh...

Linux shell 指令碼例項

1.寫乙個指令碼,利用迴圈計算10的階乘 2.寫乙個指令碼,執行後,列印一行提示 please input a number 要求使用者輸入數值,然後列印出該數值,然後再次要求使用者輸入數值。直到使用者輸入 end 停止 執行指令碼方法 nuhup sh route.sh 注意前面要用上nohup,...