在 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"
。这正是我所需要的。