予期しない動作が発生しました。次のスニペットは「バインドされていない変数」エラーで失敗します。
#!/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