回答:
source tmp.txt
export a b c
./child ...
他の質問から判断すると、変数名をハードコードしたくありません:
source tmp.txt
export $(cut -d= -f1 tmp.txt)
試して:
$ source tmp.txt
$ echo "$a $b $c"
123 hello world one more variable
$ perl -E 'say "@ENV{qw(a b c)}"'
$ export $(cut -d= -f1 tmp.txt)
$ perl -E 'say "@ENV{qw(a b c)}"'
123 hello world one more variable
grepしてコメントをスキップできますexport $(grep --regexp ^[A-Z] tmp.txt | cut -d= -f1)
set -a
. ./tmp.txt
set +a
set -aこれにより、今後定義される変数¹が自動的にエクスポートされます。Bourneのようなシェルで使用できます。.以下のための標準とボーン名ですsourceので、私は(移植性のためにそれを好むコマンドsourceから来ているcshとを含む、ほとんどの近代的なボーンのようなシェルで利用できるようになりましたbash)時には、わずかに異なる動作をする(が)。
POSIXシェルではset -o allexport、より記述的な代替方法としてそれを記述(set +o allexport設定解除)することもできます。
¹ではbash、オンになっている間に宣言されたすべての関数がallexport環境にエクスポートされることに注意してください(BASH_FUNC_myfunction%%環境変数は、としてbash実行されている場合でも、その環境で実行されるすべてのシェルによってインポートされますsh)。
ただやる:
while read LINE; do export "$LINE"; done < ./tmp.txt
set -aははるかに簡単ですが、これは実際に機能します。