
shell脚本中的函数规定必须首先定义它们,然后再使用它们,并且违规将报告诸如空指针之类的问题.
因为解释并执行了shell脚本,即从上到下翻译. 如果在定义函数后在内部调用函数,则shell解释器将报告“ command”shell脚本 函数,因为未找到未加载的函数“. 为什么像Java这样的语言不需要考虑函数的顺序?因为像Java是在执行之前进行编译的,在编译阶段,编译器将汇编函数调用,只需要转到相应的堆栈即可找到相应的函数.
例如test-function.sh
以上脚本的执行将打印出来

因为执行时,解析器从上到下加载函数f1,f2,main,然后执行main
我们发现f1 f2 main已加载shell脚本 函数,因此可以顺利执行
此函数从上到下进行解析. 第一行发现要执行main. main不是命令. 查找是否在main之前有一个称为main的函数,但结果没有错误.
在上面,首先加载f1函数,然后运行f1函数,但是f1函数在运行时会调用f2函数,但未定义f2函数,因此会报告错误

请注意,这里报告的错误只是为了将标准错误输出到控制台,但是以下命令仍将立即执行,并且不会在发生错误的地方被中断.
那么,如何在不考虑顺序的情况下像Java一样编写它?另外,我想解决两个问题.
默认情况下,让脚本以main函数开头
您可以指定执行脚本中定义的功能

对于问题1,默认情况下让脚本以main函数开头
例如,Java,当我运行Java类时,该Java类中必须有一个main函数,并且它可以接收数组作为参数.
让我们来看看我的框架的写作. 最后只需要引入一个文件
此功能的功能是在执行功能时根据输入参数执行响应功能

例如
sh test-function.sh main指定要执行主要功能
Sh test-function.sh默认的主功能开始时不带参数. 如果没有主要功能,则会报告错误. 解决了主功能启动的问题. 启动范例类似于java xxx.
此外,为了解决函数不关心定义的顺序的问题,我们要做的就是在解析完所有函数后执行,因此我们需要放置
source ./../ Utils / base_end.sh
最后.
此外,execute用于解决指定功能的执行. 此解决方案还解决了带有参数的功能问题
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-223792-1.html
如果没有石油
好听