命令列表错误

命令列表错误

我有一个 bash 脚本,列出目录中的所有文件:

for file in foo/*; do
  echo ${file##*/}
done

如果目录中有文件,它工作正常,但如果没有文件,它会列出上一级目录的文件。

我怎样才能解决这个问题?

答案1

如果目录中没有任何内容foo,则变量file将获取文字值foo/*。替换${file##*/}将产生字符串*,并echo输出当前目录中的所有名称。

要解决此问题bash,最简单的选择是使用 来设置nullglobshell 选项shopt -s nullglob。这可以确保如果没有与模式匹配的名称,文件名通配不会扩展到模式本身。

bash手册中:

nullglob

如果设置,bash则允许不匹配任何文件的模式(请参阅上面的路径名扩展)扩展为空字符串,而不是其自身。

诗。我希望手册使用“名称”或可能的“文件名”而不是“文件”。

相关内容