O que você definiu com set -u é forçar uma saída com uma mensagem de erro, se tentar usar uma variável indefinida ( O comando set builtin ).
A forma de aqui-documenta << com EOF é equivalente a como se estivesse duplicando as palavras dentro para permitir que as variáveis sejam expandidas (expansão de parâmetro) pelo shell ( bash neste caso; também sujeito a substituição de comando e expansão aritmética). Para evitar que a expansão aconteça, cite a string here com uma única citação
set -u
<<'EOF'
a=a
b=$a
EOF