为什么 bash 双星 (globstar) 运算符通常默认被禁用?

为什么 bash 双星 (globstar) 运算符通常默认被禁用?

这似乎是一个非常有用的功能。但我必须知道它通常在默认情况下被禁用。我考虑过在我的系统上启用它。但它被禁用可能是有充分理由的。如果不知道这一点,启用它似乎是不明智的。因此我的问题是:为什么 bash 双星运算符通常默认被禁用?

我发现了多个关于如何启用它、操作符的名称以及如何使用它的问题。他们都提到必须首先启用它。但没有一个问题能够解释为什么默认情况下它是禁用的。

答案1

如果不询问开发商,很难确定。

无论如何,它是一个不兼容的扩展,直到 2009 年才添加到 Bash(之前在 zsh、ksh93 和 yash 中实现)。如果意外触发,它也会产生令人惊讶的结果。甚至可能是危险的,例如,如果脚本做了类似的事情

rm -- "$dir"/*$pattern*/*       # or
rm -- "$dir"/*"$string"*/*

无需确保$pattern非空。是的,两者都会在 Bash 中触发globstar(启用时)。

同样的警告适用于大多数其他具有**: zshksh93 -o globstartcsh(在set globstar) 和之后的 shell yash -o extended-glob。但不是fish:它的**语义有些不同,但它不会用两个星号之间的东西触发它。

请参阅 Stéphane 的回答ls * 、 ls ** 和 ls *** 的结果了解不同 shell 中实现的历史和差异。

相关内容