bashにおいて、サブシェル(呼び出し先の別のシェル)内で呼び出し元の変数を参照しようとする場合、export または declareに-xオプションを使用する必要がありますが、配列変数も同様にexportしても参照できません。
例えば以下の2つのシェルを書きます。
hoge.sh内容
#!/bin/bash declare -a -x HOGE=("hoge1" "hoge2") # 配列変数 declare -x FOO="foo" # 通常の変数 ./foo.sh
foo.sh内容
#!/bin/bash echo "HOGE="$HOGE echo "FOO="$FOO
実行すると、下記のように配列の内容を表示できません。
# ./hoge.sh HOGE= FOO=foo
これは単純にbashが配列のexportをサポートしてないからのようです。なので、どうしても配列を”source”コマンドまたは”.” コマンドで実行してあげる必要があります。
hoge.sh内容(source版)
#!/bin/bash declare -a -x HOGE=("hoge1" "hoge2") declare -x FOO="foo" source ./foo.sh
実行すると、下記のようにHOGEの内容が表示されます。
# ./hoge.sh HOGE=hoge1 FOO=foo
もちろんsourceや”.”で実行した場合、サブシェルではなく同じシェル上で実行されるので、fool.sh内での変数宣言がhoge.sh内でも見られるようになりますので、変数名のぶつかりに注意する必要があります。