Предположим, у нас есть эта среда:
mkdir -p /tmp/foo/bar/
export TEST=/tmp/foo
Из коробки, завершение bash $ TEST крайне противоречиво.Свидетель: →
$ 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 делать правильные вещи, и если да, то как?Я пытался понять руководство , но без особого успеха.