回答:
exportexportコマンドが実行されたシェルの子プロセスに変数の割り当てをエクスポートします。コマンドライン環境はスクリプトのシェルの親であるため、変数の割り当ては表示されません。
.(またはsource)bashコマンドを使用して、現在のシェル環境でスクリプトコマンドを実行し、目的を達成できます。たとえば、
source ./script.sh
echo "$BASE"
生産します
/home/develop/trees
source多くの場合、スクリプトの中で見られるコマンドは、のために、bashの同義語である.POSIX標準の一部である、(そう.例えば、ダッシュで利用可能ですが、sourceではありません)。
. ./script.sh # identical to "source ./script.sh"
(. script.shそしてsource script.sh最初にscript.shinを探すPATHので、へのパスを指定する方が安全script.shです。)
exportサブシェルに変数を渡す必要はありません。サブシェルは、変数や関数などを含む現在のシェルのコピーです。エクスポートされた変数は、そのプロセスが別のシェルであるかどうかに関係なく、シェルから生成される新しいプロセスにコピーされます。次に、.ソーシング用のPOSIXコマンドです。Bashはsourceより読みやすい同義語として追加しますが、shで使用できることに依存することはできません。最後. ./scriptの代わりに、. scriptあなたは驚きを避けたい場合。mywiki.wooledge.org/BashFAQ/060