没有文件时如何处理`*`扩展

时间:2016-02-28 07:22:59

标签: bash

我正在创建一个shell脚本,允许您使用YAD从目录中选择文件。我这样做:

  list='';
  exc='!'
  for f in "$SHOTS_NOT_CONVERTED_DIR"/*;do
    f=`basename $f`
    list="${list}${exc}${f}"
  done

问题是,如果该目录中没有文件,我最终会选择*

在Bash中使用这种方法最简单,最优雅的方法是什么? 如果那里没有文件,目标是有一个列表。

1 个答案:

答案 0 :(得分:3)

*扩展称为 glob表达式。 bash手册将其称为filename expansion

您需要设置nullglob选项。如果glob表达式找不到文件,那么这样做会给你一个空结果:

shopt -s nullglob

list='';
exc='!'
for f in "$SHOTS_NOT_CONVERTED_DIR"/*;do
    # Btw, use $() instead of ``
    f=$(basename "$f")
    list="${list}${exc}${f}"
done