当我在我的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模式的语法)必须在某处,但我找不到它。
我可以匹配变量名末尾的字符串吗?
但主要是
我可以在变量名称的任何位置匹配字符串吗?
哦,什么是令人愉快的
我可以在变量名称的任何位置匹配任何(*)吗? (基本上列出for循环中的任何变量,而BTW正是我正在尝试做的事情)
答案 0 :(得分:6)
据我所知,没有内置方法可以在名称末尾进行间接名称扩展。
这是一个命令,您可以使用该命令执行所需操作:
$ compgen -v | grep -E "HOME$"
这将匹配名称以HOME结尾的每个变量。
通过改变grep部分,您可以匹配变量名称的任何部分。
compgen
是一个bash内置,旨在用于完成脚本。 compgen -v
将列出所有变量名称。 compgen -v BASH
会列出与echo ${!BASH*}
相同的变量,但每行一个。