シェルスクリプトで些細な文字をエスケープするのはなぜですか?


23

レガシーシェルスクリプト(Solarisの古いksh88で作成された)を開いたところ、コード全体で次のことが繰り返されていることがわかりました。

[ -f $myfile ] && \rm -f $myfile

バックスラッシュのエスケープは、私を奇妙に感じます。

この種の(明らかに役に立たない)エスケープはコード全体で繰り返されるため、意図的に行われていることを知っています。元の著者はいなくなってしまったので、私は彼と連絡を取って彼に尋ねることはできません。

これは単に著者の面白い特異性ですか、それともある時点で意味のある非推奨の良い習慣ですか?それとも、実際に物事を行うための推奨方法であり、私は完全に何かを見逃していますか?


3
それには十分な理由がありますが、この方法を使用してスクリプトでエイリアス保護を提供することは、私が「推奨」と呼ぶものではありません。スクリプトの先頭にあるエイリアスをクリアするか、rmフルパスで呼び出すことで十分です。
ソルピガル

回答:



5

通常、rmに対していくつかの保護手段を導入することをお勧めします。これは通常、エイリアシングによって実現されます。マルチユーザー環境では、多くの場合、これらの保護の多くが実施されています。

シェルスクリプト作成者にとって、これらのセーフガードを無効にすることは、彼らが何をしているのか知っていると思われるので、しばしば有用です。これは、前述のように、コマンドの前に\

@Sorpigalの提案に反して、エイリアスの設定を解除することは絶対にお勧めします。スクリプトがユーザーにセーフガードを戻さないようにするためです。さらに、フルパスを使用するのも賢明ではありません。これは、rmが理由により補助パスに含まれている可能性があるためです。つまり、GNU rmとBSD rmです。これを厳密なパスでオーバーライドすることは、PATHを持つという目的を無効にすること、つまり、多くのアーキテクチャ、環境、およびユーザーをスケーリングおよび処理することです。


3
エイリアシングrmは一般的ですが、良いことではありませんが、非常に貧弱で不幸な習慣です。
jlliagre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.