Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

bashで配列のエクスポートができない@bash 3.2

      2013/07/15

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内でも見られるようになりますので、変数名のぶつかりに注意する必要があります。

 - IT技術, プログラミング ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
Linuxの高速再起動 – kexec @Debian etch

カーネルバージョン2.6.13からサポートされている機能です。 ランレベル1に移 …

no image
perlのCPANでモジュールをインストール@Debian Etch

CPANにはperlのモジュールが多数登録されています。これをインストールする方 …

no image
PAM認証でのchroot

サーバのセキュリティを確保するためにchrootを使用する方法がありますが、サー …

no image
Java スクリプト API

Javascriptではありません。Java スクリプト APIです。 JRub …

no image
dockerのストレージドライバーをdevicemapperに変更する@Ubuntu 14.04

Ubuntu 14.04(desktop)にdockerを入れて、docker …

no image
プロセスの優先度@CetnOS 5.5

Linuxのプロセス優先度には、大きく分けて2つあります。 静的優先度 (リアル …

no image
CDやDVDの中身が見れない@Windows Vista

最近悪名高いWindows Vistaを使っているのですが、一通り設定や必要そう …

no image
Samsung KiesでService Initiali Failed エラー@Windows 7 64bit

Galaxy S管理用のソフト、SamsungのKiesをインストールすると、W …

no image
radikoを出張先で聞く@Windows 7 or XP Professional 以上

普段は自宅が関東にあり、インターネットラジオradikoを聞いていたのですが、出 …

no image
JSPのJSTLとJSFの混在 – Unified EL(Expression Language)

JSFだけでJSPを書いていると、JSPのタグも使いたくなることがあります。今回 …