変数var
が展開されるタイミングがビアドキュメントで記述した時点で展開されるからです。
bash
1$ export var=foobar
2$ /bin/bash <<EOF
3> for var in a b c; do
4> echo ${var}
5> done
6> EOF
7foobar
8foobar
9foobar
bashに渡されるヒアドキュメントに記述したスクリプトは以下となります。
bash
1for var in a b c; do
2echo foobar
3done
これを解決するには以下のようにしてください。<<EOF
ではなく<<'EOF'
bash
1export var=foobar
2/bin/bash <<'EOF'
3for var in a b c; do
4echo ${var}
5done
6EOF
7a
8b
9c
この場合、bashに渡されるヒアドキュメントに記述したスクリプトは以下となります。
bash
1for var in a b c; do
2echo ${var}
3done
補足
bashのマニュアルの<<'EOF'
該当部は以下です。が文章がわかり辛いので(Qiita)bashのヒアドキュメントを活用するを読んでいただければと思います。
$ man bash
ヒアドキュメントの形式を以下に示します:
<<[-]word
here-document
delimiter
word に対するパラメータ展開・コマンド置換・算術式展開・パス名展開は全く
行 わ れません。 **word が一部でもクォートされている場合**は、 delimiter は
word のクォートをほどいた結果 (クォート文字を削除した結果) となり、
**ヒアド キュメントに含まれる行では展開が行われなくなります**。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。