Странное поведение автодополнения

Странное поведение автодополнения

Ну... Я совсем запутался, потому что единственная реальная проблема в моем случае — это чертов апостроф (').
Ситуация:Расширение переменной PATH влияет на завершение слов в зависимости от того, были ли апострофы в дополнительном пути или нет.
Пример:У меня есть exe-файл (называемый «deadbeef») с соответствующими правами exe, путь к которому содержит 2 апострофа:
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
Специально для эксперимента я поместил этот же файл в
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
Если я экспортирую первый путь в переменную $PATH, то в bash не будет автодополнения, но будет во втором случае. Когда я ввожу в терминале первые буквы программы в экспортированном каталоге
мертвый[TAB]
В первом случае нет завершения, но когда я использую TAB с тем же словом во втором условии - это работает.
Но если я ввожу команду "deadbeef" в первом случае вручную - это тоже выполняется.
Более того, обакоторыйитипкоманды говорят, что exe-файл существует в обоих случаях.
Так в чем проблема??? Почему bash обрабатывает апострофы таким образом?

решение1

Апострофы являются специальными символами почти для всех оболочек (термин shell относится к интерпретаторам командной строки, то есть программам, которые считывают то, что вы вводите, и преобразуют это в соответствующее значение).

Короткий ответ: не делайте этого. Что касается пробелов, лучше избегать имен файлов со специальным значением или специальных символов в них.

Длинный ответ: если вы хотите использовать апострофы, вам нужно "цитировать" их (используя специальные символы, которые не позволяют оболочке интерпретировать их). Автодополнение автоматически заключит их в кавычки, когда это необходимо... Пример:

(0)samsung-romano:~/tmp/try% touch "hard'n'soft"

Один из способов заключить одинарные кавычки в кавычки — это использовать двойные кавычки. (И наоборот, хотя это и сложнее).

(0)samsung-romano:~/tmp/try% ls
hard'n'soft

Теперь, если написать cat hardи нажать TAB:

(0)samsung-romano:~/tmp/try% cat hard\'n\'soft 

Обратная косая черта — это еще одна форма цитирования следующего символа.

решение2

Ну, как и посоветовала команда bash_completion, я сообщил об этом поведении команде bash, и их ответ таков:
«Спасибо за сообщение. Это будет исправлено в bash-4.3».
похоже, ошибка уже известна, и нам следует просто подождать.

решение3

Чтобы расширить путь, содержащий апострофы, добавьте « перед путем.

cd "/home/mallniya/hard

без проблем расширяется при расширении вкладок.

Связанный контент