按 T​​AB 进行文件名扩展会删除变量扩展周围所需的引号

按 T​​AB 进行文件名扩展会删除变量扩展周围所需的引号

在 bash 中我设置了一个变量,如:o='OneDrive - MyCompany'。然后我通过输入: 来使用它cd "$o"/Docu。然后我按 TAB 键对文件夹名称进行单词补全。结果是cd $o/Documents。我按回车键但失败了,因为它偷了我的双引号。哈!?!我想用作"$o"该目录名称的快速快捷方式。我不想输入"$o/Docu然后按 TAB,然后按",这有效。当我开始打字时,我不想考虑是否可以按 TAB 键来扩展路径中稍后的内容。我只想遵循双引号变量的规则,但这在这里不起作用。

我真的希望能够在定义变量时在空格前放置反斜杠,并在扩展变量后尊重它们。我有什么办法可以做到这一点吗?这样就可以很好的解决这个问题了。

处理这个问题的最佳方法是什么?我不想对抗系统,但我确实想要一些感觉快速和自然的东西。

我是否应该更改任何 shell 设置以更接近预期的行为?我使用 tcsh 已经 25 年了,现在才转向 bash。有很多东西需要学习和调整。我当前的 shell 选项是:

$ shopt
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       on
checkwinsize    off
cmdhist         on
compat31        off
compat32        off
compat40        off
compat41        off
compat42        off
compat43        off
completion_strip_exe    off
complete_fullquote      on
direxpand       off
dirspell        off
dotglob         on
execfail        off
expand_aliases  on
extdebug        off
extglob         off
extquote        on
failglob        off
force_fignore   on
globasciiranges off
globstar        on
gnu_errfmt      off
histappend      on
histreedit      on
histverify      on
hostcomplete    on
huponexit       off
inherit_errexit off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     on
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell        off
shift_verbose   off
sourcepath      on
xpg_echo        off

注意:这个问题不同于为什么我不能使用 cd 来使用 shell 变量的制表符扩展/自动完成功能?但事实证明它有相同的答案。

答案1

我刚刚找到答案为什么我不能使用 cd 来使用 shell 变量的制表符扩展/自动完成功能? 我需要设置shopt -s direxpand.这会扩展变量并添加令人垂涎的反斜杠以转义空格即使我没有使用"$o"。这正是我所需要的。

相关内容