在 Ubuntu 11.10 中我有一个 bash 命令/别名/函数如下:
function ?() {
xxx $1
}
这非常有效。
现在在 Ubuntu 13.04 中它不再起作用了。当我尝试使用一些参数执行命令时,我得到:
0:未找到命令
发生了什么变化,导致我不能再使用这个缩写?
PS 当然可以更改别名,这只是出于好奇而提出的问题。
答案1
?
是一个 glob(模式,通配符),它将匹配由一个字符组成的文件名;它将被当前目录中的匹配文件替换。如果当前目录中没有匹配的文件,它将保持不变,并且您的函数将被触发。这在和?
中称为路径名扩展man bash
文件名扩展在 bash 参考手册中
0
在这种情况下,您显然在当前目录中有一个名为的文件,因此通过 pathaname 扩展? foo
将其更改为,然后它会尝试运行以作为参数命名的命令。如果您将该文件删除/重命名为长度超过一个字符的名称,您的函数应该会开始工作。或者,您可以使用或或来避免它被视为 glob。0 foo
0
foo
\?
"?"
'?'
附注:?
在函数名称中使用是没有记录的,也不建议使用。只有字母数字和下划线有记录证明可以工作(与变量名允许的相同)。