当我按下TabBash 以便它自动完成包含冒号的文件名时,自动完成的结果会转义冒号。例如,从以下开始(不执行最后一行),
touch a:b
ls a
我按Tab,结果是
ls a\:b
但是当我刚刚发出时它似乎没有任何影响ls a:b
。结果与 for 相同ls a\:b
。
那么为什么 Bash 会逃脱冒号呢?在某些情况下它有特殊意义吗?
当我按下TabBash 以便它自动完成包含冒号的文件名时,自动完成的结果会转义冒号。例如,从以下开始(不执行最后一行),
touch a:b
ls a
我按Tab,结果是
ls a\:b
但是当我刚刚发出时它似乎没有任何影响ls a:b
。结果与 for 相同ls a\:b
。
那么为什么 Bash 会逃脱冒号呢?在某些情况下它有特殊意义吗?
冒号是 COMP_WORDBREAKS中的字符之一:
如 以冒号字符开头的完成项目中所述:
从 COMP_WORDBREAKS 环境变量中删除冒号将解决问题。
参见例如 Maven 转义冒号的 Bash 完成。