首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么compgen需要在这里转义?

为什么compgen需要在这里转义?
EN

Stack Overflow用户
提问于 2013-05-26 04:38:38
回答 1查看 329关注 0票数 2

当我在双引号中使用单引号时,compgen -W有一些有趣的行为(看看最后一个参数和输出在不同命令中是如何不同的):

代码语言:javascript
复制
$ 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,或者有任何解释为什么它必须以这种方式工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-26 08:29:28

这是因为compgen处理目标中的引号字符和转义字符的方式。实际上,它对完成可能意味着什么采取了非常字面的观点。

让我们考虑一下第一种情况,但其中可能的单词没有任何特殊字符:

代码语言:javascript
复制
ab1
ab2

在bash中,您可以通过以下任一方式(以及其他方式)键入这些单词的第一个:

代码语言:javascript
复制
ab1
a'b'1
a''b1
a'b1'

因此,ab1ab2都是a'的可能补充。这就是compgen返回的内容。

现在,让我们回到问题中的实际目标:

代码语言:javascript
复制
a'b1
a'b2

其中的第一个可以用以下两种方式之一(以及其他方式)键入:

代码语言:javascript
复制
a\'b1
a''\'b1

但它不能像这样键入:

代码语言:javascript
复制
a'\''b1

因此,以下所有操作都可以在任一目标上完成:

代码语言:javascript
复制
a
a'
a\

但以下内容不能为

代码语言:javascript
复制
a'b
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16753687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档