以问号字符命名的 Bash 函数不再起作用

以问号字符命名的 Bash 函数不再起作用

在 Ubuntu 11.10 中我有一个 bash 命令/别名/函数如下:

function ?() {
  xxx $1
}

这非常有效。

现在在 Ubuntu 13.04 中它不再起作用了。当我尝试使用一些参数执行命令时,我得到:

0:未找到命令

发生了什么变化,导致我不能再使用这个缩写?

PS 当然可以更改别名,这只是出于好奇而提出的问题。

答案1

?是一个 glob(模式,通配符),它将匹配由一个字符组成的文件名;它将被当前目录中的匹配文件替换。如果当前目录中没有匹配的文件,它将保持不变,并且您的函数将被触发。这在和?中称为路径名扩展man bash文件名扩展在 bash 参考手册中

0在这种情况下,您显然在当前目录中有一个名为的文件,因此通过 pathaname 扩展? foo将其更改为,然后它会尝试运行以作为参数命名的命令。如果您将该文件删除/重命名为长度超过一个字符的名称,您的函数应该会开始工作。或者,您可以使用或或来避免它被视为 glob。0 foo0foo\?"?"'?'

附注:?在函数名称中使用是没有记录的,也不建议使用。只有字母数字和下划线有记录证明可以工作(与变量名允许的相同)。

相关内容