TMPDIRには末尾のスラッシュが必要ですか?

TMPDIRには末尾のスラッシュが必要ですか?

Unix / POSIX / Linuxシステムでは、TMPDIR変数を使用して一時ディレクトリを設定できます。ウィキペディア Open Group 仕様への参照これに言及してください。

これは私に答えを残しません。これにスラッシュを含める必要がありますか? (つまり、TMPDIR="/foo/bar"またはTMPDIR="/foo/bar/")。

オンラインで見つけた例を見ると、末尾のスラッシュはより一般的であると思われますが、明確な答えが欲しいです。これはどこでも標準化/明確化されましたか?

答え1

最後にスラッシュを追加することと追加しないものの間に大きな違いはありません。末尾のスラッシュを使用すると、同様に構成されている場合は二重$TMPDIR/somethingスラッシュを含むパスを取得できますが、これはほとんどまたはまったく効果がありません。パス名の先頭の二重スラッシュは、TMPDIR=/これが違いがある場合にのみ特別に解釈できます。//foo/barは/foo/barとどのようなシステムで異なっていますか?

$TMPDIRディレクトリが名前付きシンボリックリンクによって参照され、パス名がスラッシュで終わると、リンクを検出できません。つまり、他の場所のシンボリックリンクにTMPDIR=/tmp/dir/andを使用すると、シンボリックリンクが逆参照されるため、常にfalseになります。/tmp/dir[ -L "$TMPDIR" ]

一部のユーティリティは、末尾のスラッシュ文字がない場合とは異なり、指定された引数を解釈することができます。これが問題の場合は、$TMPDIR/.引数に末尾のスラッシュがないことを確認する必要があります。後続のスラッシュが必要な場合、またはを使用してください。交換は末尾のスラッシュを削除します(存在する場合)。${TMPDIR%/}$TMPDIR/${TMPDIR%/}/${TMPDIR%/}多くの種類末尾のスラッシュ)。

POSIX は末尾のスラッシュの使用を強制しません。結局のところ、個人的な好みによって異なりますが、一貫性を維持するのが役立ちます。個人的には、私は通常、パス名を含む変数の末尾にスラッシュを追加しません。

また関連:

答え2

Artemの10年の経験を追加すると、私は彼の意見に完全に同意します。もちろん、ファイル名を$ TMPDIRに盲目的に関連付ける、誤って書かれたスクリプトを使用しないように注意してください。

また、末尾のスラッシュを含むディレクトリ名(ディレクトリの下のファイル)を末尾のスラッシュを持たないディレクトリ名(ディレクトリ自体)とは異なるように解釈するrsyncなどの特定のユーティリティを使用するときにも注意する必要があります。

最後に、tmpディレクトリはシンボリックリンクすることができます。

末尾のスラッシュの最初のポイントは、シンボリックリンクを逆参照することです。つまり、DIRNAMEがシンボリックリンクの場合、DIRNAME /がシンボリックリンクが指すディレクトリを参照すると、DIRNAMEはシンボリックリンクを参照します。

関連情報