私の目標は、実行中のすべてのテストスクリプトで呼び出すか参照できる変数のリストを作成することです。システムには多くのテストスクリプトがありますが、変数は複雑で理解しにくいです。各設定タイプで同じ変数名が異なります。わかりやすくするために変数名を変更し、同じ変数を参照するようにテストスクリプトを変更したいと思います。
以下は、スクリプトで変数を定義する方法の例です。
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
グローバル変数とローカル変数の違いは、シェル内にのみあります(シェル関数とは反対)。
エクスポートされた変数とエクスポートされていない変数の違いは(サブシェルだけでなく)シェルの子プロセスにのみあります(エクスポートされた変数だけが子プロセスの環境変数になります)。