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
Windowsのtelnetコマンドの文字コード@Windows XP

限られた環境で、ターミナルのソフトにWindowsのtelnetしかない場合、t …

no image
LDAPサーバ構築 その2 – Sambaサーバとの連携 @ Debian etch

LDAP+SambaでPDCを構築する方法です。 # apt-get insta …

no image
pptpサーバの構築@CentOS 5.8

pptpサーバ構築時のメモ書き。 # yum install ppp pptp …

no image
iptablesでポートフォワーディング

通常Linuxのデフォルトはパケットのフォワーディングが無効になっているので、ま …

no image
パイプを使ったループの中で使用した変数をループ外で参照できない@bash

bashでパイプを使って以下のような処理をすると、ループ内の変数の値をループ外で …

no image
日本語入力のON/OFFのキーを変更する@Fedora 17

Fedora 17 のデフォルトの日本語入力切り替えのキーは、Ctrl + Sp …

no image
Windows アップデートで使用するプロキシを設定@Windows Vista

Windows XPでは、proxycfgコマンドで、Windowsアップデート …

no image
Webベースでマニュアルや仕様書などのドキュメント書き

マニュアルや仕様書などのドキュメントを書くとき、どのようなツールを皆さん使ってい …

no image
cygwin ck のダブルクリック選択文字列の範囲を変更する

Cygwin 用のターミナルソフトウェア cygwin ck  を便利に使わせて …

no image
firefox7のアドレスバーにhttps://を表示させる

firefox7からアドレスバーのURLにhttps://が表示されなくなりまし …