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,...