BASH shell参数(间接)扩展

时间:2011-05-12 11:34:35

标签: bash shell

当我在我的shell中输入echo ${!BASH*}时,我会获得名称以字符串“BASH”开头的所有env变种:

BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

BASH手册页对这个名为shell parameter (indirect) expansion的功能非常谨慎。这个信息(这个特定的globbing模式的语法)必须在某处,但我找不到它。

  1. 我可以匹配变量名末尾的字符串吗?

    但主要是

  2. 我可以在变量名称的任何位置匹配字符串吗?

    哦,什么是令人愉快的

  3. 我可以在变量名称的任何位置匹配任何(*)吗? (基本上列出for循环中的任何变量,而BTW正是我正在尝试做的事情)

1 个答案:

答案 0 :(得分:6)

据我所知,没有内置方法可以在名称末尾进行间接名称扩展。

这是一个命令,您可以使用该命令执行所需操作:

$ compgen -v | grep -E "HOME$"

这将匹配名称以HOME结尾的每个变量。

通过改变grep部分,您可以匹配变量名称的任何部分。

compgen是一个bash内置,旨在用于完成脚本。 compgen -v将列出所有变量名称。 compgen -v BASH会列出与echo ${!BASH*}相同的变量,但每行一个。