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

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

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

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

バックスラッシュをエスケープするのは奇妙に思えます。

この種の(明らかに役に立たない)エスケープがコード全体で繰り返されているので、意図的であることはわかっています。元の作者はとっくに亡くなっており、連絡を取って質問することもできません。

これは単に作者の奇妙な癖なのでしょうか、それともある時点では意味があったものの、現在は廃止されている良い習慣なのでしょうか? あるいは、実際に推奨されているやり方で、私が何かを見落としているのでしょうか?

答え1

これはエイリアス保護に使用されます:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b

答え2

rm に何らかの安全策を講じることは一般的に良い習慣であり、これは通常エイリアスによって実現されます。マルチユーザー環境では、これらの保護策の多くが実施されていることがよくあります。

シェル スクリプトの実践者にとっては、おそらく何をしているのかわかっているので、これらの安全策を無効にすることが役立つことがよくあります。これは、前述のように、コマンドの前に\.を付けることで実現されます。

@Sorpigal の提案とは反対に、スクリプトがユーザーに安全策を返せなくなる可能性があるため、エイリアスの設定を解除することは絶対にお勧めしません。さらに、rm が何らかの理由で補助パスにある場合 (つまり、GNU rm と BSD rm の場合) もあるため、フル パスを使用するのも賢明ではありません。これを厳密なパスで上書きすると、PATH を持つ目的、つまり、多くのアーキテクチャ、環境、ユーザーを拡張して処理するという目的が達成されなくなります。

関連情報