如何编写一个bash别名来列出所有名称匹配的env-vars

时间:2011-08-04 13:51:38

标签: bash grep alias

你好友好的伙计们。在使用Bash的Linux上,我经常需要列出名称以某个预定义词开头的环境变量(env-var)。例如,要列出名称模式为gmXXX的所有env-vars,我将执行

[chj @linux-ic37 ~]$ export|grep '^declare -x gm'
declare -x gmu_DO_SHOW_COMPILE_CMD="1"
declare -x gmu_DO_SHOW_LINK_CMD="1"

但每次写这么长的命令都很无聊。那么,我可以写一个别名来简化它吗?我试过但没有运气。

[chj @linux-ic37 ~]$ alias fvgm="export|grep \'^declare -x gm\'"

[chj @linux-ic37 ~]$ fvgm
grep: gm': No such file or directory

任何人都可以帮助我吗?

为了更进一步,我可以进行'gm'参数化,例如

fv gm

列出以'gm'开头的所有env-var?

3 个答案:

答案 0 :(得分:2)

您不需要在别名中转义单引号。将其更改为:

alias fvgm="export|grep '^declare -x gm'"

您需要编写一个函数来使其成为通用函数。例如:

fv(){
    export | grep "^declare -x $1"
}

然后你可以打电话:

fv gm

答案 1 :(得分:2)

如何:fv() { env | grep "^$1"; }

$ fv HO
HOSTNAME=...
HOSTTYPE=...
HOME=...

答案 2 :(得分:1)

您是否尝试过compgen -v STR

这将生成以STR开头的所有变量名称的列表 这应该是比管道export更好的选择,因为它不涉及另一个过程

因此,相同的fv函数可以写为[编辑添加值]

fv()
{
   for EV in $(compgen -v ${1}); do 
     eval echo "$EV=\$$EV"
   done
}