不足している変数と「-u」フラグを拡張してもBashが失敗しないのはなぜですか?

不足している変数と「-u」フラグを拡張してもBashが失敗しないのはなぜですか?

このBashスクリプトは失敗すると予想しましたが、正常に実行されました。

set -u
exec {FOO}>/tmp/foo.lock
echo "FOO=$FOO"

OnlineGDBでも:https://onlinegdb.com/3gv34jmGr

Bash(5.0.3と5.1.16)はFOOファイル記述子に拡張しようとしていて、未定義で-u設定されているので、停止したいと思います。その路線を運営するだけでなく、置く FOO任意の数字に変換してスクリプトを完成させます。標準出力は

FOO=10

ここで何が起こっているのでしょうか?文書化されたBash機能ですか?これに関する詳細情報はどこにありますか?特に数字10があるのはなぜですか?

答え1

~から手動:

各リダイレクトの前にファイルディスクリプタ番号を付けることができますが、次の形式の単語を前に付けることもできます{varname}。この場合>&-とを除くすべてのリダイレクト演算子に対して、<&-シェルは10より大きいファイル記述子を割り当ててそれに割り当てます{varname}

(もちろん「10以上でなければなりません。」)

あなたはexec {FOO}>/tmp/foo.lock仕事を含みます。FOO定義されなくなりました。

関連情報