¿Por qué escapar de los caracteres triviales en el script de shell?

¿Por qué escapar de los caracteres triviales en el script de shell?

Acabo de abrir un script de shell heredado (escrito en el antiguo ksh88 en Solaris) y encontré lo siguiente repetido en todo el código:

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

La barra invertida que se escapa me parece extraña.

Sé que es deliberado, ya que este tipo de escape (aparentemente inútil) se repite a lo largo de todo el código. El autor original desapareció hace mucho tiempo, no puedo comunicarme con él para preguntarle.

¿Es esto simplemente una idiosincrasia divertida del autor o es algún tipo de buena práctica obsoleta que tuvo sentido en algún momento? ¿O tal vez es en realidad la forma recomendada de hacer las cosas y me estoy perdiendo algo por completo?

Respuesta1

Esto se utiliza para la protección de alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b

Respuesta2

En general, es una buena práctica incluir algunas salvaguardias en rm, lo que normalmente se logra mediante alias. En entornos multiusuario, a menudo verá muchas de estas protecciones implementadas.

Para un practicante de scripts de shell, a menudo es útil desactivar estas salvaguardas ya que, presumiblemente, saben lo que están haciendo. Esto, como se mencionó, se logra anteponiendo el comando con un \.

Contrariamente a la sugerencia de @Sorpigal, definitivamente desaconsejaría desarmar los alias, para que el script no devuelva al usuario sus protecciones. Además, utilizar una ruta completa tampoco es aconsejable ya que rm puede estar en una ruta auxiliar por una razón, es decir, GNU rm frente a BSD rm. Anularlo con una ruta estricta sería anular el propósito de tener PATH, es decir, escalar y manejar muchas arquitecturas, entornos y usuarios.

información relacionada