假设我们有这样的环境:
mkdir -p /tmp/foo/bar/
export TEST=/tmp/foo
开箱即用,$TEST 的 bash 完成非常不一致。证人:→
$ cd $TES<Tab> → $ cd $TEST<cursor>
$ cd $TEST<Tab> → $ cd $TEST<cursor>
$ cd $TEST/<Tab> → $ cd $TEST/<cursor>
$ cd $TEST/b<Tab> → $ cd $TEST/b<cursor> # no actual completion!
$ ls $TES<Tab> → $ ls $TES<cursor> # no actual completion!
$ ls $TEST<Tab> → $ ls $TEST<cursor> # same
$ ls $TEST/<Tab> → $ ls /tmp/foo/bar/<cursor> # expands var, annoying!
$ echo $TES<Tab> → $ echo $TEST <cursor> # with a space, annoying!
$ echo $TEST<Tab> → $ echo $TEST <cursor> # same
$ echo $TEST/<Tab> → $ echo /tmp/foo/bar/<cursor> # expands var, annoying!
将此与例如 tcsh 完成完成的方式进行比较,后者总是完成$TES
到$TEST/
(如果$TEST
扩展为目录名)或到$TEST
(如果没有)并且从不扩展任何内容。在我的傲慢看来,这就是正确的事情,而 bash 完全错误。
所以问题很明显。是否有可能让 bash 也做正确的事情,如果可以,怎么做?我试图理解手册,但没有多大成功。