2011-08-04 57 views
1

友好的傢伙。在使用Bash的Linux上,我經常需要列出名稱以某個預定義詞開頭的環境變量(env-var)。例如,要列出所有的env-VAR提供名稱模式gmXXX,我會做如何編寫一個bash別名來列出所有名稱匹配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 

任何人都可以幫我嗎?

爲了進一步做好,我可以去,只要有「克」參數,像

fv gm 

列出所有的env-VAR以「克」?

回答

2

您不需要轉義別名中的單引號。將其更改爲:

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

您需要編寫一個使其具有通用性的函數。例如:

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

然後,您可以撥打:

fv gm 
1

你嘗試compgen -v STR

這將產生開始STR 所有的變量名的列表,這應該是一個更好的選擇因爲它不涉及另一個過程

因此,相同的fv函數可以寫成[編輯追加值]

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

很抱歉,但它僅列出變量名,不存在價值。 –

+0

@Jimm好吧我修改了包括值。問題的文本沒有變量和它們的價值,所以在這個基礎上下調並不是很酷 – nhed

2

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

$ fv HO 
HOSTNAME=... 
HOSTTYPE=... 
HOME=... 
相關問題