Bashでの変数のエクスポートとグローバル変数の設定

Bashでの変数のエクスポートとグローバル変数の設定

私の目標は、実行中のすべてのテストスクリプトで呼び出すか参照できる変数のリストを作成することです。システムには多くのテストスクリプトがありますが、変数は複雑で理解しにくいです。各設定タイプで同じ変数名が異なります。わかりやすくするために変数名を変更し、同じ変数を参照するようにテストスクリプトを変更したいと思います。

以下は、スクリプトで変数を定義する方法の例です。

RightNumberOfDevices=$( lspci -n | egrep --count "8086:[[xdigitx]][xxdigit]][[:xdigit:]][[:xdigit:]]" )

他のスクリプトでは、以下を見ることができます。

TotalNumberOfDevices=$( lspci -n | egrep --count "8086:[[xdigitx]][xxdigit]][[:xdigit:]][[:xdigit:]]" )

環境全体でその変数の値にアクセスできるように、ある種の起動スクリプトでTotalNumberOfDevicesを宣言できます。

これは私が達成したいコードです。

ethcounter=$(ifconfig -a | egrep --count "eth[0-9]+")
ethindex0=$((ethcounter-1))

declare -a eth                  #This declares that "eth" is an array variable

for ((i=0; i<=ethindex0; i++))
 do
        eth[$i]=$(ifconfig eth$i | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' )
        echo "eth[$i]" = "${eth[$i]}"
        set ${eth[$i]}
 done

私が望むのは、各イーサネットデバイスのIPアドレスを保存し、それを別のスクリプトで使用できるようにすることです。

ベストアンサー1

グローバル変数とローカル変数の違いは、シェル内にのみあります(シェル関数とは反対)。

エクスポートされた変数とエクスポートされていない変数の違いは(サブシェルだけでなく)シェルの子プロセスにのみあります(エクスポートされた変数だけが子プロセスの環境変数になります)。

おすすめ記事