2011-08-04 6 views
1

こんにちは友人。 Bashを使ったLinuxでは、あらかじめ定義された単語で始まる環境変数(env-var)を列挙する必要があることがよくあります。たとえば、名前のパターンgmXXXを持つすべてのENV-VARSを一覧表示するには、私がすべての名前に一致するenv-varsをリストするためのbashエイリアスの書き方

[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' で始まるすべてのenv-VARを一覧表示する

fv gm 

のように、 'GM' がパラメータとして持つ私は限り行くことができ、さらにそれを作るには?

答えて

2

エイリアスで一重引用符をエスケープする必要はありません。これを次のように変更してください:

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

これを汎用にする関数を記述する必要があります。たとえば、次のように

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

あなたはその後、呼び出すことができます。

fv gm 
1

あなたはこれはこれは良いオプションである必要がありSTR で始まるすべての変数名のリストを生成しますcompgen -v STR

を試してみました他のプロセスが含まれていないので、配管exportよりも小さい。

したがって、同じ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=...