変数が複数行のコメントで参照されている場合の Bash の「未バインド変数」エラー (set -u)

変数が複数行のコメントで参照されている場合の Bash の「未バインド変数」エラー (set -u)

予期しない動作が発生しました。次のスニペットは「バインドされていない変数」エラーで失敗します。

#!/bin/bash
set -u
<<EOF
a=a
b=$a
EOF

テスト対象:
GNU bash、バージョン 4.4.12(1) リリース
GNU bash、バージョン 4.2.46(2) リリース

答え1

定義したのは、set -u未定義の変数を使用しようとした場合にエラーメッセージを出して強制終了することです(組み込みsetコマンド)。

のヒアドキュメントの形式は<<EOF内部の単語を二重引用符で囲むのと同等で、シェルによって変数が展開(パラメータ展開)されます(bashこの場合、コマンド置換と算術展開の対象にもなります)。展開が発生しないようにするには、ヒア文字列を一重引用符で囲みます。

set -u
<<'EOF'
a=a
b=$a
EOF

関連情報