要从另一个目录访问目录中的文件,我经常为该目录设置一个变量。例如(你可以自己尝试一下),
导出 dir1=/usr/local/bin
然后输入ls $dir1/
。tab
我希望 shell 显示 /usr/local/bin 下的文件,但是tab
,字符$
被\
转义为\$dir1
,shell 不再理解它$dir1
,并且不会将其扩展为 /usr/local/bin ,也不会显示那里的文件。这很烦人(我以前这样做没有问题,但从 ubuntu-22.04 开始是否会发生这种情况?)。有什么方法可以阻止文件名自动完成期间的自动转义?
ps - 我看到了https://lists.gnu.org/archive/html/bug-bash/2011-02/msg00280.html但没有找到答案,只有无关紧要的长篇大论。
答案1
此行为由 shell 选项控制direxpand
:
直接展开
如果设置,Bash 在执行文件名补全时会用单词扩展的结果替换目录名。这会更改 Readline 编辑缓冲区的内容。如果未设置,Bash 会尝试保留用户输入的内容。
因此请检查您的 shell 中是否设置了该选项 ( shopt direxpand
),如果没有,请使用 进行设置shopt -s direxpand
。
看