回答:
スクリプトは、2つのファイルから文字列のペアを読み取ります。各反復では、文字列からの読み込みfile11
にlineA
、そしてからfile22
にしlineB
。いずれかのファイルの終わりに達するまで、これを行います。ループの本体は、2つの文字列と空白行を出力します。
<file11
は、「file11
このコマンドに標準入力を接続/リダイレクトする」という意味while
です。「このコマンド」はループです。これも書かれたかもしれません0<file11
。
標準入力はファイル記述子番号0です。ファイル記述子1および2は、標準出力および標準エラーストリーム用に予約されています。
3<file22
は、「file22
このコマンドのためにファイル記述子3を接続する」という意味です。番号3は次の「空き」ファイル記述子番号ですが、コードは代わりに4または5または0、1および2以外の任意の小さな整数を使用できます(使用可能なファイル記述子番号の制限はシェルによって異なります使用されていますが、9までの数字が機能することが保証されています)。
ループでread lineA
は、デフォルトで標準入力、つまりファイルから文字列を読み取りますfile11
(標準入力はループから継承されます)。これも書かれたかもしれませんread lineA <&0
。
を使用するread lineB <&3
と、read
コマンドはファイル記述子3から読み取ります。つまり、file22
標準入力からではなく、から読み取ります(ファイル記述子3は、標準入力と同様にループで使用できます)。
つまり、標準入力ストリームと「追加の」ファイル記述子(番号3)を使用して、2つのファイルから「同時に」(各ファイルの文字列を順番に)読み取ります。通常、1つは1つの入力ストリームにしかアクセスできませんが、2つ目の入力ストリームを明示的に作成してfile22
ファイルに接続することにより、この制限を回避します。
関連:
「行」ではなく「文字列」という単語を使用します。2つのファイルから読み取られたものには、隣接する空白が削除され、特定のエスケープシーケンスが特別に解釈されます。
読むにはラインを使用してread
、使用することを
IFS= read -r varname
関連:
3<file22
が返さfopen
れるのでFID
はなく、事前に指定されている場所のようなものですか?
fdopen()
ます。はい。