Por que escapar de caracteres triviais no shell script?

Por que escapar de caracteres triviais no shell script?

Acabei de abrir um script de shell herdado (escrito no antigo ksh88 no Solaris) e encontrei o seguinte repetido em todo o código:

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

A barra invertida que escapa me parece estranha.

Eu sei que é deliberado, já que esse tipo de escape (aparentemente inútil) é repetido em todo o código. O autor original já se foi, não consigo entrar em contato com ele para perguntar.

Isso é simplesmente uma idiossincrasia engraçada do autor ou é algum tipo de boa prática obsoleta que fez sentido em algum momento? Ou talvez seja realmente a maneira recomendada de fazer as coisas e estou perdendo alguma coisa?

Responder1

Isso é usado para proteção de alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b

Responder2

Geralmente é uma boa prática incluir algumas salvaguardas no rm, o que normalmente é conseguido por meio de alias. Em ambientes multiusuário, muitas dessas proteções serão frequentemente implementadas.

Para um praticante de script de shell, muitas vezes é útil desabilitar essas proteções, pois presumivelmente ele sabe o que está fazendo. Isso, como mencionado, é feito prefaciando o comando com uma extensão \.

Ao contrário da sugestão de @Sorpigal, eu definitivamente desaconselho a desativação dos aliases, para que o script não devolva ao usuário suas salvaguardas. Além disso, usar um caminho completo também não é aconselhável, pois rm pode estar em um caminho auxiliar por uma razão - ou seja, GNU rm vs. BSD rm. Substituí-lo por um caminho estrito seria anular o propósito de ter PATHs, ou seja, escalar e lidar com muitas arquiteturas, ambientes e usuários.

informação relacionada