加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash实用程序脚本库

发布时间:2020-12-15 09:15:45 所属栏目:安全 来源:网络整理
导读:是否有任何常用的(或不正当地不常用的)实用程序“库”的bash函数?像Apache的commons-lang为Java。 Bash是如此无处不在,它似乎在扩展库的领域奇怪地被忽视。 bash的库存在,但不常见。 bash库缺乏的原因之一是由于功能的限制。我相信这些限制最好解释“Greg
是否有任何常用的(或不正当地不常用的)实用程序“库”的bash函数?像Apache的commons-lang为Java。 Bash是如此无处不在,它似乎在扩展库的领域奇怪地被忽视。
bash的库存在,但不常见。 bash库缺乏的原因之一是由于功能的限制。我相信这些限制最好解释“Greg的Bash Wiki”:

功能。 Bash的“函数”有几个问题:

>代码可重用性:Bash函数不返回任何东西;它们只产生输出流。捕获该流并将其分配给变量或将其作为参数传递的每个合理方法都需要一个SubShell,它会中断对外部作用域的所有分配。因此,可重用函数的库不可行,因为你不能要求函数将其结果存储在名称作为参数传递的变量中(除非另有说明)。通过执行eval backflips)。
>范围:Bash有一个简单的局部范围系统,大致类似于“动态范围”(例如Javascript,elisp)。函数查看调用者的本地(像Python的“nonlocal”关键字),但是不能访问调用者的位置参数(如果启用了extdebug,则通过BASH_ARGV除外)。可重用函数不能保证没有命名空间冲突,除非你使用奇怪的命名规则使冲突不可能。如果实现期望作用于来自帧n-3的可能被n-2处的可重用函数覆盖的变量名的函数,这尤其是个问题。 Ksh93可以通过使用“function name {…}”语法声明函数来使用更常见的词法作用域规则(Bash不能,但仍然支持此语法)。
> Closures:在Bash中,函数本身总是全局的(有“文件范围”),所以没有闭包。函数定义可以嵌套,但这些不是闭包,虽然它们看起来非常相同。函数不是“passable”(first-class),并且没有匿名函数(lambdas)。事实上,没有什么是“passable”,特别是数组。 Bash使用严格的按值语义(除了魔术别名hack)。
>有更多的并发症涉及:subshel??ls;导出函数; “函数折叠”(定义或重新定义其他函数或自身的函数);陷阱(和它们的继承);和函数与stdio交互的方式。不要咬新手,不理解这一切。 Shell函数完全f ***。

资料来源:http://mywiki.wooledge.org/BashWeaknesses

Shell“库”的一个示例是基于Redhat的系统上的/etc/rc.d/functions。此文件包含sysV init脚本中常用的函数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读