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

时间:2009-02-04 14:55:40

标签: bash variables scripting

在bash中

echo ${!X*}

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

5 个答案:

答案 0 :(得分:52)

使用builtin命令compgen:

compgen -A variable | grep X

答案 1 :(得分:8)

这应该这样做:

env | grep ".*X.*"

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

中查找X.
env | awk -F "=" '{print $1}' | grep ".*X.*"

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

set | awk -F "=" '{print $1}' | grep ".*X.*"

答案 2 :(得分:3)

这将仅在变量名中搜索X并仅输出匹配的变量名:

set | grep -oP '^\w*X\w*(?==)'

或更容易编辑搜索模式

set | grep -oP '^\w*(?==)' | grep X

或简单(可能更容易记住)

set | cut -d= -f1 | grep X

如果要在变量名称内匹配X,但以name = value形式输出,则:

set | grep -P '^\w*X\w*(?==)'

如果你想在变量名中匹配X,但只输出值,那么:

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*'

答案 3 :(得分:2)

最简单的可能是

printenv |grep D.*=

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

答案 4 :(得分:1)

env | awk -F= '{if($1 ~ /X/) print $1}'