stdinがfd4にリダイレクトされた場合、読み取りが機能するのはなぜですか?

stdinがfd4にリダイレクトされた場合、読み取りが機能するのはなぜですか?

次のスクリプトはどういう意味ですか?

exec 4<&0 0</etc/XX/cfg
read line1
exec 0<&4

fd0をfd4にリダイレクトし、「/etc/XX/cfg」をfd0にリダイレクトします。

では、なぜそれreadでも動作しますか?空にしてはいけませんか?

ベストアンサー1

これはstdin(FD0)をFD4にリダイレクトし、FD0を/etc/XX/cfgFD0にリダイレクトし、FD0から行を読み取り、FD4を再びFD0に移動します。つまり、中間ファイルから 1 行を読みながら標準入力を保存、置換、復元します。

read line1 < /etc/XX/cfgはるかに簡単ですが、表示されたコードだけが有効な代替であるかどうかを知る方法はありません。

おすすめ記事