当模式匹配此字符串时,为什么 Bash 返回“No such file..”?

1 bash wildcards

我有以下 for 循环:

for f in ~/.lo-rcs/common/*
do
   . $f
done
Run Code Online (Sandbox Code Playgroud)

这是返回此错误:

bash: /home/sk/.lo-rcs/common/*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我一直将我的 bashrc 命令分类到多个单独的文件中,并将它们保存在$HOME/.lo-rcs/common. 我希望所有文件都自动导入 Bash,但它不断抛出“没有这样的文件...”错误。

为什么 Bash 不搜索与通配符模式字符串同名的文件?

  • 注意 #1: .lo-rcs/common是我的本地 rc 配置文件夹,其中包含单独的别名文件,一个用于导出变量,一个用于函数等,以便于维护。
  • 注意#2:下面的所有文件.lo-rcs/common都是隐藏文件,也就是。以点开头的文件。

mic*_*has 6

~/.lo-rcs/common/* 匹配该目录中的所有非隐藏文件,如果该目录中没有文件或所有文件都被隐藏,则模式评估为自身,导致您的错误消息。

没有充分的理由隐藏这些文件。- 只需重命名它们,一切都会按预期进行。

如果您真的希望隐藏这些文件,则可以使用~/.lo-rcs/common/.*. 但请注意,这包括...

  • FWIW:bash 有一些影响这种行为的选项:`nullglob`、`failglob`、`dotglob`、`nocaseglob` 和环境变量`GLOBIGNORE`。 (4认同)