~によるとこのページ:
Linuxのファイル名には、(1)ルートディレクトリ(つまり、他のすべてのディレクトリとファイルを含むディレクトリ)の名前と、ディレクトリ区切り文字として使用するように予約されているスラッシュ(/)を除く任意の文字を含めることができます。 (2)NULL文字(テキストセグメントを終了するために使用されます)。空白は許可されますが、場合によっては古いソフトウェアと互換性がない可能性があるため、避けるのが最善です。
いいですね。どちらの制限も意味があります。ファイル名で特定の文字を許可しないことは明らかに可能ですが、なぜ改行を許可するのですか?私が知る限り、それらの唯一の用途はスクリプトを複雑にする。ファイル名に改行文字が必要な理由はありますか?
答え1
NUL
/
指定されたシステム機能があります。他のキャラクターはそうではありません。
それがその基礎です。残りはコメント、推測、歴史です。リスニング、リーディングなどは、次の方法でのみ可能です。フィラー議論や議論ではありません:
- 特定の文字を禁止すると、ファイルシステム自体に複雑さが追加されます。
- さまざまなシステムで改行文字を構成するバイトは何ですか?
<CR>
そして<LF>
平等 - リモートシステムがNFSに改行文字を含むファイルを生成することにした場合、どうなりますか?
- ファイル名は破損していますが、ファイルの内容が破損していない場合はどうなりますか?
- アプリケーションがファイル名に情報をエンコードした場合はどうなりますか?
続ける
- ユーザーソフトウェアのバグを修正するのはシステムの使命ですか?
- システムはルートレベルで自分自身を保護する必要がありますか?
- さまざまなシェルの内部実装によって、どのファイル名が有効であると見なされるかを判断しないでください。
基本オペレーティングシステムには設定された制限はありません。システムに入って来る情報はバイトストリームです。バイトに特別な意味がない場合は、ユーザースペースで処理する必要があるチェックを追加してオーバーヘッドを作成しないでください。
とにかく最大の問題は、改行文字やその他の制御文字を許可する長い歴史です。
もう一つの状況は禁止されることです。改行に言及しましたが、UNIX石器時代の議論で議論され、他の文字もあります。禁止されるべきですか*
?で始まるファイル名はどうですか-
?そしてDEL
?ESC
すべての制御文字を禁止する必要がありますか?その他など
残念ながら、創設者やコードメンテナンス者はこのトピックに言及したことを思い出していません。