gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:55:58 25 4
gpt4 key购买 nike

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

为什么第三个命令需要 \之前 '获得完成选项,但第一个命令没有?在调试我的完成脚本时,我花了几个小时才发现这个事实。这是一个错误,还是有任何解释为什么它必须以这种方式工作?

最佳答案

是因为路compgen处理目标中的引号字符和转义字符。实际上,它从字面上理解了完成可能意味着什么。

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

ab1
ab2

在 bash 中,您可以通过以下任何一种方式(以及其他方式)键入这些单词中的第一个:
ab1
a'b'1
a''b1
a'b1'

所以两者 ab1ab2a' 的可能完成.这就是 compgen返回。

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

其中第一个可以通过以下任何一种方式输入(除其他外):
a\'b1
a''\'b1

但它不能像这样输入:
a'\''b1

因此,可以对任一目标完成以下所有操作:
a
a'
a\

但以下不能
a'b

关于bash - 为什么 compgen 需要在这里转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com