【发布时间】:2016-02-02 23:26:09
【问题描述】:
在编写 bash 脚本时,我喜欢编写自包含函数,这些函数接受一个参数并基于该/那些参数执行操作,而不是在代码中的多个不同位置声明全局变量,从而降低可读性。
当您有一个需要使用多个变量的函数时,就会出现问题。将 10 个变量之类的东西传递给一个函数实在是太丑陋了,为此可以使用一个简单的关联数组。
如果我们想在外部文件中声明这些变量,“source”命令允许您将它们全部导入。
然后问题就变成了,我如何列出仅在此文件中声明的变量,以便我可以使用它们构建关联数组? 我已经能够使用“compgen”和循环的组合从变量列表中构建关联数组,但是如何只列出文件中找到的变量,无论它们被称为什么,所以我可以循环他们并建立我的阵列?
【问题讨论】:
-
我倾向于建议为您的文档使用易于解析的注释格式(就像 doxygen、javadoc 和衍生工具一样)。
-
您总是可以比较
declare/set在获取配置文件之前和之后的输出吗? =) 或者,如果配置文件对于该函数是唯一的,则直接创建数组。如果它不是函数独有的,那么您需要某种方法来只使用正确的变量,所以只需编写一个“collect_args”函数,该函数采用函数期望的变量名称等。 -
谢谢。 @EtanReisner 我认为您的建议可能不得不这样做,因为除了解析实际文件之外,我似乎找不到更好的解决方案
-
您实际上可能想查看github.com/threatgrid/declarative.bash。它可能对你有用。 (我对此一无所知,我只是将它放在标签中一段时间,然后回去查看。)
-
您介意回复答案吗?您是否需要进一步的帮助,或者它可能不符合您的需求?
标签: bash shell associative-array compgen