シェルスクリプトで単純な文字をエスケープする必要があるのはなぜですか?

シェルスクリプトで単純な文字をエスケープする必要があるのはなぜですか?

私は以前のシェルスクリプト(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 です。これを厳密なパスにオーバーライドすると、多くのアーキテクチャ、環境、およびユーザーを拡張および処理するパスの目的が無効になります。

関連情報