首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash中列出文件中的所有变量

在bash中列出文件中的所有变量
EN

Stack Overflow用户
提问于 2015-11-03 06:49:26
回答 3查看 1.1K关注 0票数 7

在编写bash脚本时,我喜欢编写自包含函数,这些函数接受一个参数并根据该参数/那些参数执行操作,而不是在代码中的几个不同位置声明全局变量,这会降低可读性。

当你有一个需要使用多个变量的函数时,问题就出现了。将10个变量传递给一个函数是非常难看的,为此可以使用一个简单的关联数组。

如果我们想在外部文件中声明这些变量,"source“命令允许您将它们全部导入。

然后问题就变成了,我如何列出仅在这个文件中声明的变量,以便我可以用它们构建我的关联数组?我已经能够使用"compgen“和循环的组合来从变量列表中构建关联数组,但是如何只列出在文件中找到的变量,而不管它们的名称是什么,这样我就可以遍历它们并构建我的数组?

EN

Stack Overflow用户

发布于 2015-11-17 23:11:58

您可以对文件上的某些变量声明语法执行egrep,然后通过剪切获得变量名称,例如:

代码语言:javascript
运行
复制
egrep '[a-zA-Z0-9"'\''\[\]]*=' /path/to/file |egrep -v '^#' |cut -d'=' -f1 |awk '{print $1}'

如果您有一个包含以下内容的文件

代码语言:javascript
运行
复制
#!/bin/bash

A="test"

somerandomfunction () {
        echo "test function"
        B="test"
}

#C="test"

DEF="test"
GHI1="test"
JKL[1]="test"
JKL['a']="test"
JKL["b"]="test"

上述命令的输出将如下所示:

代码语言:javascript
运行
复制
A
B
DEF
GHI1
JKL[1]
JKL['a']
JKL["b"]

命令的解释:

=.

  • The第一个egrep搜索包含任意数量和组合的小写(a-z)和/或大写(A-Z)字母和/或方括号(\[\])和/或单引号('\'')和/或双引号("),后跟第二个egrep的行不包括以=开头的行,因为这些行通常被解释为注释,不会生成或设置variable.
  1. The #命令将删除从=到行尾的所有内容。
  2. awk命令打印第一次出现的内容,而不是空格或制表符,因此有效地消除了变量名前面的空格。

该命令的输出可以在循环中使用,或者类似以下内容:

代码语言:javascript
运行
复制
for VAR in $(egrep '[a-zA-Z0-9"'\''\[\]]*=' /path/to/file |egrep -v '^#' |cut -d'=' -f1 |awk '{print $1}'); do
  eval echo "\$${VAR}"
done
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33488463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档