それは文字通りです、{fd}
はプレースホルダーではありません。これを実行するスクリプトがあり、何も読み込まず、他の場所で{fd}を参照しません。これは有効なbashですか?
exec {fd}</dev/watchdog
ファイル記述子を選択して、それが利用可能であることを期待する必要はありません。
exec 4< /dev/watchdog # Was 4 in use? Who knows?
この表記は、シェルに現在使用されていないファイル記述子を選択し、その記述子で読み取るためにファイルを開いて、指定された変数(fd
)に番号を割り当てるように要求します。
$ exec {fd}< /dev/watchdog
$ echo $fd
10
フォーム:
{var}<filename
シェルは、ファイル記述子番号を読み取って変数filename
に保存するためにファイルvar
を開いた。 {var}
とリダイレクト演算子の間にスペースはありません。ファイル記述子番号は10
以上になります。
この機能は、ksh
から(2006年のバージョンksh93rから)オリジナルでした。bash
は、2010年からbash-4.1-alpha
で大幅にコピーしました。zsh
も、zsh 4.3.4
からbash
より早く変更を加えました。
これは リダイレクト のBashマニュアルセクションで説明されています。
ファイル記述子番号が前に置かれる可能性のある各リダイレクトの代わりに、{varname}という形式のWordが前に置かれる場合があります。この場合、
>&-
と<&-
を除く各リダイレクト演算子に対して、シェルは10より大きいファイル記述子を割り当て、それを{varname}。>&-
または<&-
の前に{varname}が付いている場合、varnameの値は、閉じるファイル記述子を定義します。