シェルスクリプトのパス変数の最後にスラッシュを使用する必要がありますか?[閉まっている]


11

今日は私のシェルスクリプトを書いています。

いきなり質問が浮かんできました。

以来cd /target_dircd /target_dir/両方とも動作します。
シェルスクリプトのパス変数の最後にスラッシュを追加する必要がありますか?
このようなLOG_PATH=/data/nginx/logsLOG_PATH=/data/nginx/logs/

グーグルで粗検索をしましたが、これについての議論は見つかりませんでした。

今のところ、どのスタイルを選ぶかを決めるのは本当に難しいです。
しかし、私LOG_PATH=/target_dir/はもう少しスタイルを好んだ。
私がbashでオートコンプリートを実行しているときは、スラッシュで結果がポップされるからです。

これについてあなたの意見は何ですか、なぜですか?


1
関連:ディレクトリパス変数の末尾がスラッシュ(SO)でもう少し少ない場合:パスを
確実に

ルールはありません。どちらのコーディングスタイルにも、いくつかの利点と欠点があります。
andcoz 2015年

回答:


8

POSIXによると:

パス名の定義:

ファイルを識別するために使用される文字列。これはオプションの先頭に持っている<スラッシュ>で区切られたゼロ個以上のファイル名に続く文字、<スラッシュ>文字が。パス名には、オプションで1つ以上の末尾の<スラッシュ>文字を含めることができます。複数の連続する<スラッシュ>文字は、2つの先行する<スラッシュ>文字の場合を除いて、1つの<スラッシュ>と同じであると見なされます。


@興味深いのは、bashプロンプトでcdを実行///てその名前を異なる方法で表示できることpwdです。使用すると、異なるパスが表示されますが、内容は同じです。どうして?
Zen


1
なぜならbash、現在のディレクトリを文字列として非常に単純な方法で追跡するからです。パスからヒューリスティックに追加および削除するだけで、実際のファイルシステムにはリンクしません。結果の1つは、シンボリックリンクにcdして同じ方法で戻ることができることです(bashが多すぎると判断せずに再初期化した場合)。もう1つは、あなたが説明するものです。現在のディレクトリのシェルの追跡に依存するべきではありません、それは信頼できません。
オリオン2015年


6

安全のために、スラッシュを含めます。これにより、パスを連結するときに複数のスラッシュが発生する可能性がありますが、少なくとも問題は回避できます。

いくつかの例:rsync末尾のスラッシュが含まれている場合、パスの扱いが異なります(別のサブディレクトリを作成するのではなく、そのディレクトリを同期ます)。末尾のスラッシュがない場合、ディレクトリへのシンボリックリンクが予期しない方法で動作することがあります-少なくともシェルの補完が混乱します。呼び出すコマンド/スクリプトが、特別な動作のためにスラッシュをチェックすることに依存しているかどうかはわかりません。それは何かを上書きすることからあなたを救うことさえできます。たとえば、という名前のファイルfooがあっても、それがディレクトリであると誤って考え、その中の何かを移動したい場合、mv bar fooファイルは上書きされますが(データ損失、潜在的な大惨事)、mv bar foo/文句を言って何もしません。

結論として、ほとんどの場合それは問題ではありませんが、スラッシュを使用して自分自身を保護し、また、スクリプトで意図したことを人間の読者にわかりやすくする必要があります。カジュアルなオブザーバーは、変数がスラッシュで終わっている場合、変数がディレクトリを参照していることを即座に確認し、変更が必要な場合は正しく使用します。


2

いいえ、できません。余分なスラッシュ(/)が追加されます。

binあなたはあなたのPATH変数にJavaのディレクトリをエクスポートしたいと言う、

export PATH=$PATH:/opt/jre1.7.0_45/bin/

今それをチェックし、

user@host:~$ which java
/opt/jre1.7.0_45/bin//java

/Javaの前に余分なスラッシュ()があることに注意してください。


このリンクで31票の回答があり、著者はスラッシュを追加する必要があると考えています。よくわかりません。stackoverflow.com/questions/980255/...

@禅、はい私はそれをチェックしました、それはあなたの質問の最初のコメントでした。ありがとう。
Arnab

6
スラッシュを2つ使用するよりも、2つ使用する方がよい。これは醜いですが安全です...他のオプションはもっと悪く、危険な場合があります。
オリオン2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.