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

bash

echo ${!X*} 

将打印所有名称以“X”开头的variables名称。
是否有可能获得相同的任意模式,例如获取名称包含一个“X”的variables的所有名称在任何位置?

Solutions Collecting From Web of "bash:获取名称与特定模式匹配的variables列表"

使用内建命令compgen:

 compgen -A variable | grep X 

这应该做到这一点:

 env | grep ".*X.*" 

编辑:对不起,该值也在X中查找。 该版本仅在var名称中查找X.

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

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

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

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

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

或者更容易编辑搜索到的模式

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

或者干脆(也许更容易记住)

 set | cut -d= -f1 | grep X 

如果要在变量名称中匹配X,但在名称=值形式中输出,则:

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

如果你想匹配X里面的变量名,但是只输出值,那么:

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

最简单的可能是做一个

 printenv |grep D.*= 

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

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