2015-10-18 64 views
2

POSIX shell在bash中是否有類似於$FUNCNAME的東西?

+0

問這個,因爲我通常使用'do_something(){FUNC = $ {FUNCNAME: - 做一點事} .... ; }'在我的便攜式腳本,我想知道是否有一個更簡單的方式,也許... –

+0

DUP http://stackoverflow.com/q/2630812 –

+0

不是真的,問題是'_The問題:我怎麼得到一個腳本中所有函數名稱的列表?_'不''當前函數名稱是什麼'。我正在尋找一個解決方案,看起來像bash'回聲「用法$ FUNCNAME 」.' –

回答

2

的這些要求的POSIX標準SH向is quite small有特殊的行爲變量列表,並沒有等同於FUNCNAME給出;最接近的是LINENO

(如果這樣的事情在POSIX SH已經存在,爲什麼會打壞添加自己的,而不是推行規範?)

+1

這真的是個問題:它是一個特定的東西,還是我錯過了什麼?感謝您的回答 –

+1

@AndrasP它是特定的bash。 Ksh93在'$ {。sh.fun}'中有相當的功能。試試'function a {echo「.sh.fun = $ {。sh.fun}」; }'。你可以用'typeset -n FUNCNAME = .sh.fun'來模擬bash。默認情況下,ksh嘗試不使用特殊行爲重載shell變量。 –

0

編輯 我如何測試,如果有一個變量只是一張紙條,告訴我目前的功能是什麼。什麼是最初混淆是FUNCNAME是可用的Mac甚至在/bin/sh所以我想知道爲什麼它在Linux上是空的 - 因此OP。 打開variables的規格可以瞭解一些情況(請參閱接受的答案),但我仍然好奇在函數中還有什麼可用的。

怎麼看相關功能 環境 shell變量:

組應在當前語言環境的整理順序寫的所有shell變量名稱和值

所以

$ set > a 

$ function f() { 
    set > b 
} 

$ f 

然後

diff a b 

能不能給我的功能有關的變量在bash(並沒有在SH如預期)

> BASH_LINENO=([0]="5") 
14a15 
> FUNCNAME=([0]="f") 
55c56 
+0

作爲POSIX規範。引用顯示,沒有參數的'set'應該列出_variables only_。 這是一個'bash'特定的_extension_也列出_functions_(如果你在POSIX模式下運行'bash'(例如,通過運行'shopt -so posix'),你將只能得到變量)。如果使用'bash'是一個選項,則可以簡單地使用'$ FUNCNAME'。 說實話,這個答案主要是分心 - 考慮接受@ CharlesDuffy的答案。另外:'變量'鏈接是關於_environment_變量,而不是_shell_變量。 – mklement0

+0

這更多的是關於如何找到與**當前函數**相關的變量的附註。最初我正在尋找一個變量,所以顯然我正在使用'set'。 –

+0

如果這是一個附註,請更新這個答案,以清楚地標記它,並_解釋它如何與你的問題相關。此外,「這也意味着,如果我做了以下事情,我應該得到我需要的信息」特別令人困惑,因爲上面直接引用的內容清楚地說明了shell _variables_。我所發現的有趣之處在於,你隱式地演示了POSIX類的shell在執行期間遇到定義的行之前不會創建函數和變量。 – mklement0