bash - 如何在 bash 中测试文件名扩展结果?

标签 bash shell

我想在 bash 中检查一个目录是否有文件。 我的代码在这里。

for d in {,/usr/local}/etc/bash_completion.d ~/.bash/completion.d
     do              
         [ -d "$d" ] && [ -n "${d}/*" ] &&                         

         for f in $d/*; do                                                                                                           
             [ -f "$f" ] && echo "$f" && . "$f"                        

         done                                                                                                                        
     done

问题是“~/.bash/completion.d”没有文件。 因此,$d/* 被视为简单字符串“~/.bash/completion.d/*”,而不是文件名扩展结果的空字符串。 作为该代码的结果,bash 尝试运行

. "~/.bash/completion.d/*" 

当然,它会生成错误消息。

有人能帮帮我吗?

最佳答案

如果你设置了 nullglob bash 选项,通过

shopt -s nullglob

然后 globbing 将丢弃不匹配任何文件的模式。

关于bash - 如何在 bash 中测试文件名扩展结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1310997/

相关文章:

bash (Linux) 中的 Python3.4 不提供文本着色

linux - 删除特定列后的字符

mysql - 如何将登录参数传递给mysql

linux - 将标题添加到列表文本文件 awk 中的列

linux - 如何将 mv 反转为文件 - Unix

linux - 为什么在 bash 命令后附加控制字符?

linux - sed 正在用另一个命令的输出替换匹配的文本,但该命令的输出包含扩展字符

mysql - 如何使用其他文件中的凭据以及如何在 crons 中传递 dir 位置?

linux - 每 30 分钟运行一次脚本 bash

linux - 如何确保一次只运行一个 Bash 脚本实例?