定義、テキストファイルには、行の配列からなります。行は改行文字で終わります。したがって、テキストファイルは、空でない限り、改行文字で終わります。
read
組み込みは、テキストファイルのみを読み込むためのものです。テキストファイルを渡していないため、シームレスに機能することは望めません。シェルはすべての行を読み取ります。スキップしているのは、最後の行の後の余分な文字です。
最終行が欠落している可能性のある不正な形式の入力ファイルがある場合は、念のため改行を追加できます。
{ cat "/tmp/urlFile"; echo; } | …
テキストファイルでなければならないが、最後の改行が欠落しているファイルは、多くの場合Windowsエディターによって作成されます。これは通常、UnixのLFではなく、CR LFであるWindowsの行末と組み合わされます。CR文字はどこでもほとんど使用できず、どのような場合でもURLに表示できないため、削除する必要があります。
{ <"/tmp/urlFile" tr -d '\r'; echo; } | …
入力ファイルが整形式で改行で終わっている場合、echo
は余分な空白行を追加します。URLを空にすることはできないため、空白行は無視してください。
また、これread
は簡単な方法で行を読み取らないことに注意してください。先頭と末尾の空白は無視されますが、URLの場合はおそらく望ましいでしょう。これは、行末のバックスラッシュをエスケープ文字として扱い、次の行を最初の行からバックスラッシュと改行のシーケンスを除いたものに結合させますが、これは明らかに望ましくありません。したがって、-r
オプションをに渡す必要がありますread
。read
ではなく、正しいことであることが非常にまれですread -r
。
{ <"/tmp/urlFile" tr -d '\r'; echo; } | while read -r url
do
if [ -z "$url" ]; then continue; fi
…
done