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
sphinxのPDF出力環境を構築する@Ubuntu 14.04

pythonはすでにインストールされているはずなので、pipをインストール # …

no image
Janetterのデータベースサイズが大きすぎる

ふと気づいたら、以下のフォルダのJanetterのデータベースのサイズが5GBも …

no image
OpenSSL, OpenSSH脆弱性@Debian

Debian etch以降のOpenSSL, OpenSSHで大きな脆弱性が発見 …

no image
Windows7 – 非ページ プール割り当ての制限に達したため、サーバーはシステムの非ページ プールから割り当てることができませんでした

Windows7 でファイルの共有(ファイルサーバー)をしていると以下のエラーが …

no image
ポート監視やwatchdogで簡易サーバ監視@CentOS 5

アカウント共有型のレンタルサーバならサーバが落ちても、管理者の方が監視してくれて …

no image
POP3 + Maildir形式@Debian Etch

メールの保存形式をmboxからMaildirに変更したところ、qpopperがM …

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

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

no image
名前ベースのVirtualHost

今までapacheを名前ベース(NameVirtualHost)をエラーが出たま …

no image
Cygwinでscreenコマンドが使えなくなる@Windows 10

Windows 10 上のCygwin (64bit版使用)で、screen コ …

no image
or条件でのgrep

普段使ったことなかったので覚え書き。 grep で複数の文字列をor条件でマッチ …