bash:获取名称与特定模式匹配的变量列表

Pao*_*sco 35 variables bash scripting

在bash中

echo ${!X*}
Run Code Online (Sandbox Code Playgroud)

将打印名称以"X"开头的变量的所有名称.
是否可以使用任意模式获得相同的结果,例如获取名称在任何位置包含"X"的变量的所有名称?

Joh*_*itb 56

使用builtin命令compgen:

compgen -A variable | grep X
Run Code Online (Sandbox Code Playgroud)

  • (+1)这也适用于局部变量.这个compgen一直是今天的启示 - 我想我应该*学习*所有bash内置... (7认同)
  • @AlexanderMills适用于bash。在MacOS上使用bash-3.2进行了检查。 (2认同)

dic*_*ciu 10

这应该这样做:

env | grep ".*X.*"
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,这也在值中查找X. 此版本仅在var名称中查找X.

env | awk -F "=" '{print $1}' | grep ".*X.*"
Run Code Online (Sandbox Code Playgroud)

正如Paul在评论中指出的那样,如果你也在寻找局部变量,那么需要用set替换env:

set | awk -F "=" '{print $1}' | grep ".*X.*"
Run Code Online (Sandbox Code Playgroud)

  • 只获取环境变量,而不是本地变量。虽然使用“set”而不是“env”可能有效。 (2认同)

alx*_*lxp 5

最简单的可能是做一个

printenv |grep D.*=
Run Code Online (Sandbox Code Playgroud)

唯一的区别是它还打印出变量的值。