この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
定義されなくなりました。