dan*_*lee 3 command-line bash scripts 13.04
在 Ubuntu 11.10 中,我有一个 bash 命令/别名/函数,如:
function ?() {
xxx $1
}
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力。
现在在 Ubuntu 13.04 中它不再工作了。当我尝试使用一些参数执行命令时,我得到:
0:未找到命令
是什么改变了我不能再使用这个缩写?
PS当然可以更改别名,这只是出于好奇的问题。
?是一个 glob(模式,通配符),它将匹配由一个字符组成的文件名;它被当前目录中的匹配文件替换。如果当前目录中没有匹配的文件,?将保持不变,您的功能将被触发。这在bash参考手册中称为路径名扩展man bash和文件名扩展
在这种情况下,你显然有一个文件名为0在当前目录中,所以? foo被改为0 foo由pathaname扩张,然后尝试运行一个名为命令0与foo作为参数。如果您将该文件删除/重命名为长度超过一个字符的内容,您的函数应该开始工作。或者,您可以使用\?or"?"或'?'代替,以避免将其视为 glob。
附带说明一下,?在函数名称中使用是未记录的,不推荐使用。仅记录了字母数字和下划线可以工作(与允许的变量名称相同)。