当我在双引号中使用单引号时,compgen -W有一些有趣的行为(看看最后一个参数和输出在不同命令中是如何不同的):
$ compgen -W "a\'b1 a\'b2" -- "a'"
a'b1
a'b2
$ compgen -W "a\'b1 a\'b2" -- "a'b"
$ compgen -W "a\'b1 a\'b2" -- "a\'b"
a'b1
a'b2为什么第三个命令在'之前需要一个\来获取完成选项,而第一个命令不需要?在调试我的完成脚本时,我花了几个小时才弄清楚这一点。这是一个bug,或者有任何解释为什么它必须以这种方式工作?
发布于 2013-05-26 08:29:28
这是因为compgen处理目标中的引号字符和转义字符的方式。实际上,它对完成可能意味着什么采取了非常字面的观点。
让我们考虑一下第一种情况,但其中可能的单词没有任何特殊字符:
ab1
ab2在bash中,您可以通过以下任一方式(以及其他方式)键入这些单词的第一个:
ab1
a'b'1
a''b1
a'b1'因此,ab1和ab2都是a'的可能补充。这就是compgen返回的内容。
现在,让我们回到问题中的实际目标:
a'b1
a'b2其中的第一个可以用以下两种方式之一(以及其他方式)键入:
a\'b1
a''\'b1但它不能像这样键入:
a'\''b1因此,以下所有操作都可以在任一目标上完成:
a
a'
a\但以下内容不能为
a'bhttps://stackoverflow.com/questions/16753687
复制相似问题