为什么要转义 shell 脚本中的琐碎字符?

rah*_*hmu 23 ksh shell-script quoting

我刚刚打开了一个旧的 shell 脚本(在 Solaris 上用旧的 ksh88 编写),发现在整个代码中重复了以下内容:

[ -f $myfile ] && \rm -f $myfile
Run Code Online (Sandbox Code Playgroud)

转义的反斜杠让我觉得很奇怪。

我知道这是故意的,因为这种(显然无用的)转义在整个代码中都重复出现。原作者早就不在了,我联系不上他问他了。

这仅仅是作者的一个有趣的特质,还是某种在某个时间点有意义的已弃用的良好做法?或者也许实际上是推荐的做事方式而我完全错过了一些东西?

Ans*_*ann 25

这用于别名保护:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Run Code Online (Sandbox Code Playgroud)


小智 5

为 rm 设置一些保护措施通常是一种很好的做法,这通常是通过别名实现的。在多用户环境中,您经常会看到许多这样的保护措施到位。

对于 shell 脚本从业者来说,禁用这些保护措施通常很有用,因为他们大概知道自己在做什么。如前所述,这是通过在命令前加上\.

与@Sorpigal 的建议相反,我绝对建议不要取消设置别名,以免脚本无法为用户提供保护措施。此外,使用完整路径也是不明智的,因为 rm 可能出于某种原因位于辅助路径中 - 即 GNU rm 与 BSD rm。用严格的路径覆盖它将违背拥有 PATH 的目的,即扩展和处理许多架构、环境和用户。

  • 尽管很常见,但对 `rm` 使用别名并不是一种好方法,而是一种非常糟糕和不幸的做法。 (3认同)