繁体   English   中英

如何在 bash 中查找脚本中使用的变量的名称

[英]How to find the name of the variables used in a script in bash

我正在尝试列出我在脚本中声明的变量的名称,因此我一直在尝试使用以下不同组合:

( set -o posix ; set ) | less

但我没有得到我预期的结果。 除了我的脚本变量之外,它还为我提供了所有变量的输出。 我不知道我是否以正确的方式使用此命令。 我的意图是只列出我在脚本中声明的变量名称,并得到一个像这样的 output:


VAR1
VAR2
VAR3
VAR4
…

一个非常简单的解决方案,只要您为自己的变量使用前缀即可。 您应该这样做以避免意外覆盖现有变量。 设置默认值返回到一个很长的所有已定义变量的列表,而不仅仅是您的,因此您需要按前缀过滤它。

#!/bin/bash
my_var1=aaa
my_var2=`ls`
export my_var3=bbb

compgen -v| awk -F= '/^my_/{print $1}'

# If you use sh shell it remains
#set |awk -F= '/^my_/{print $1}'

结果

my_var1
my_var2
my_var3

编辑:@Socowi 正确地建议对 bash 使用 compgen -v 而不是 set。 Compgen 内置在 bash 中。 谢谢。

不能告诉set只列出脚本中声明的变量。 可以做的是在脚本的开头临时存储定义的变量并在最后过滤掉它们,因此只保留中间定义的变量:

#!/bin/bash
set -o posix
set|sed s/=.\*// >/tmp/$$

VAR4=4
VAR3=3
VAR2=2
VAR1=1

set|sed s/=.\*//|grep -vf/tmp/$$
rm /tmp/$$

请注意以下 Socowi 的宝贵改进建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM