2012-05-09 15 views
2

シェルスクリプトの初心者です。次の問題について助けが必要です。シェルスクリプトでグローバル変数を再割り当てする

私はスクリプトを持っています。それは次のように定義されたグローバル変数があります。代わりに、USER1」の私はtest_function2は「USER2」を印刷したい

test_function(){ 

    ARCHIVE_USER=user2 
    test_function2() 
} 

test_function2(){ 
    echo ARCHIVE_USER 
} 

ARCHIVE_USER=user1        

その後、この方法では、私はこれらの変数の値を変更しています"test_functionでは変数値を" user2 "に変更しましたが、実行すると常に出力として" user1 "が与えられます。私はここで間違って何をしていますか?

+1

echo $ ARCHIVE_USERは、test_function2()の方が良いはずです。または、「エクスポート」を使用して環境全体に設定することもできます。例:ARCHIVE_USER = user1をエクスポートします。 – Depado

答えて

1

このスクリプトは期待通りに機能します。つまり、「B」が印刷されます。だから、

#!/usr/bin/bash 

TEST=A 

test_a() 
{ 
    TEST=B 
    test_b 
} 

test_b() 
{ 
    echo $TEST 
} 

test_a 

、あなたに私の質問はどのように)(あなたのtest_functionを呼び出しているのですか?

+0

はい、あなたは正しいです、私は元のスクリプトで、ここでサンプルスクリプトを与えて、値BをTEST変数に代入する前に、test_bは他の関数によって呼び出されています。それは問題を作り出しています。あなたの答えは、私が問題を解決するのを助けました。御時間ありがとうございます... – KItis

2

これらの機能を同じ環境で定義する必要があります。

異なるスクリプトに入れて、/path/to/script_1.sh/path/to/script_2で実行する場合は、彼らはお互いに影響を与えません。彼らは別の環境で動作するためです。

subshell/subprocessについて詳しく読む必要があります。

関連する問題