在ksh93中typeset -f
列出了所有函数及其定义。
$ f(){ :; }
$ typeset -f
f(){ :; }
新增的一个怪癖是,定义后没有换行符的函数会以相同的方式列出:
$ g(){ :; }; h(){ :; }
$ k(){ :; }
$ typeset -f
f(){ :; }
g(){ :; };h(){ :; }
k(){ :; }
有没有一种方法可以列出所有函数名称,如果每行一个就更好了?
如果失败:有没有办法将这些定义分成单独的行?
我的意思是:无需进行所有外壳解析即可找到函数结束(或开始)。
我希望能够typeset -f functionname
对当前脚本运行环境中定义的每个函数执行此操作。
答案1
在手册中找到了解决方案:
$ typeset +f
f()
g()
h()
k()
如果指定了 +f,则显示包含函数名称的行,后跟 shell 注释,其中包含定义该函数的文件的行号和路径名(如果有)。