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
XREAでのWordPressのファイルアップロード

初めてファイルアップロード機能を使おうとしたら動かなかったのでメモ。 wp-ad …

no image
Cisco IOSエミュレータDynamipsを使ってみる@CentOS 5

Ciscoのスイッチやルータの設定の勉強をしたくて、DynamipsというCis …

no image
レスキューモード(シングルユーザモード)で起動する@Fedora 17 (RHEL7?)

※ 2015/4/24追記 : RHEL7やCentOS7はブート画面でレスキュ …

no image
Transcend Micro SDHC 32GB UHS-I PREMIUM 300x ベンチマーク

Transcend Micro SDHC 32GB UHS-I PREMIUM …

no image
gitで過去のコミットを書き換える方法まとめ

コミットしてしまった後に恥ずかしい間違いに気づいて書き換えたい時の対処方法。 ま …

Windows 10 の Ubuntu (WSL) でGUI (X Window)を使う

Windows 10 の WSL 上の Ubuntu 上のアプリでGUI(X)が …

no image
systemdやsystemctlコマンドを少し調べてみた

systemd が使いにくいので避けていたのですが、やっとFedora 15 を …

no image
SSHキーのfingerprint確認

最近 GitHub の脆弱性つかれたとかで、ssh の fingerprint …

no image
gvfsを使用して、Windowsの共有フォルダを使用する@Ubuntu 9.04

今までmaznはWindowsの共有フォルダにLinuxからアクセスする時は、m …

no image
ブックマークのスクロール位置の記憶@Firefox3

今までFirefoxを使っていて不便に思っていたことの一つに、サイドバーのブック …