Bash中的制表符自动补全如何转义$字符

7
在shell(GNU bash,version 4.2.47(1)-release (x86_64-suse-linux-gnu))中,当我按tab键进行自动补全时,变量名完成后"$"会被转义,但如果没有自动补全,则会发出提示音。例如:
$ ls $JDK_H<tab>

导致
$ ls \$JDK_HOME (with a trailing space)

在旧版 GNU bash 中,版本为 3.2.51(1)-release (x86_64-suse-linux-gnu),它没有在完成后转义 "$",这正是我想要的。

有没有一种方法可以获得旧的行为而不会产生强烈的副作用?我的 BASHOPTS 和 SHELLOPTS 是:

# (indented for readability)
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote
            :force_fignore:histappend:interactive_comments:login_shell
            :progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history
            :interactive-comments:monitor

谢谢。我正在使用SLES SP11。

--更新。其他自动完成似乎像平常一样工作,例如cdecho不会转义$。我也暂时注释了/etc/share/bash-completion/bash_completion从我的/etc/bash.bashrc中,这停止了$的转义。所以看起来像是某种完整的配置问题。


向 SuSE 报告一个 bug。 - n. m.
我不确定这是一个漏洞还是一个功能 :-( 但我知道它非常令人沮丧。 - Dinesh
为什么关闭?我在SO上看到无数的shell问题,有些确实与版本相关。 - Dinesh
许多与主题无关的问题未被注意到并不改变规则。这个问题有几个边界原因 - 如果这是一个错误,您应该提交一个错误报告;它与直接编程无关;而且您没有询问如何在代码中解决这个问题。我还相信这是一个重复的问题,尽管我找不到我之前看到的类似问题。 - tripleee
当然,没问题。我看到有几个指针说这是一个 bug。(顺便说一句,我认为 SO 是一个活生生的生态系统,适当使用的定义会不断被社区完善。) - Dinesh
1个回答

5

我没有看到与我的bash 3不同的地方。我在complete下看到了大量的配置;因此,我暂时从/etc/bash.bashrc中注释掉了/etc/share/bash-completion/bash_completion,现在cd的工作方式就像ls等一样。所以这似乎是某种complete配置问题。 - Dinesh
忘记添加了,shopt -s direxpand 不会改变这种行为。 - Dinesh
更新:添加了一些链接。 - pynexj
感谢提供链接和提示。它声称问题已在4.2.45中解决,但我正在运行bash 4.2.47仍然看到它。 - Dinesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接