当在 shell 程序中输入echo ${!BASH*}时,我得到了所有以字符串“BASH”开头的env var:

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的功能。此信息(此特定通配模式的语法)必须在某处,但我找不到它。
  • 我可以在变量名的末尾匹配字符串吗?
    但是大部分
  • 我可以在变量名的任何地方匹配字符串吗?
    哦,什么会令人高兴
  • 我可以在变量名中的任何地方匹配或其他(*)吗? (基本上列出for循环内的任何变量,顺便说一句,这正是我想做的事情)
  • 最佳答案

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

    这是一个您可以执行所需操作的命令:

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

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

    通过更改grep部分,您可以匹配变量名称的任何部分。
    compgen是bash内置函数,旨在用于完成脚本。 compgen -v将列出所有变量名称。 compgen -v BASH将列出与echo ${!BASH*}相同的变量,但每行列出一个。

    10-06 02:38