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 10 のストアアプリが起動しない

Windows 10のストアが起動しなくなってしまったので、その時実施した対処方 …

no image
AndroidでDVDのisoファイル再生

2015/3月現在、まともにisoファイルを再生できるアプリがなかなか見つかりま …

no image
SVNのシンボリックリンク?

SVNでソースを管理している時、ある他のリポジトリで管理されているライブラリを参 …

no image
スペースの入ったディレクトリ名やファイル名をスクリプトで処理する@Linux

findコマンドでスペース入ったディレクトリやファイルを検索し、その結果をfor …

no image
TCP Wrapper の設定チェック@Linux

昔からあるアクセス制限の方法として、TCP Wrapperがあります。 /etc …

no image
ログインシェルを変更する@さくらインターネット

今までLinuxを使ってたので、ログインシェルをデフォルトから変えようと思ったこ …

no image
光学メディアの書き込み速度

DVDドライブやBlu-rayドライブを買うとき、CD-R 4倍速書き込み、DV …

no image
Windows bash (win-bash)のプロセスのfork性能を測ってみた

Windows上では今までCygwinを使っていたのですが、Cygwinはプロセ …

no image
スイッチの初期化 @ Cisco Catalyst 2960

スイッチのパスワードを忘れてしまいログインできなくなった場合は初期化することにな …

no image
ACL – Access Control List @ RHEL5

ACL (Access Control List) とはファイルシステムの機能で …