小编典典

测试 glob 在 Bash 中是否有任何匹配项

all

如果我想检查单个文件是否存在,我可以使用test -e filenameor来测试它[ -e filename ]

假设我有一个 glob,我想知道是否存在名称与 glob 匹配的文件。glob 可以匹配 0 个文件(在这种情况下我不需要做任何事情),或者它可以匹配 1
个或多个文件(在这种情况下我需要做一些事情)。如何测试 glob
是否有任何匹配项?(我不在乎有多少匹配项,如果我可以用一个if语句而不是循环来做到这一点,那将是最好的(因为我发现它最易读)。

test -e glob*如果 glob 匹配多个文件,则失败。)


阅读 79

收藏
2022-04-26

共1个答案

小编典典

Bash 特定的解决方案:

compgen -G "<glob-pattern>"

转义模式,否则它将被预先扩展为匹配项。

退出状态为:

  • 1 表示不匹配,
  • 0 表示“一个或多个匹配”

stdout与 glob 匹配的文件 列表。我认为就简洁性和最大程度地减少潜在副作用而言,这是最佳选择。

例子:

if compgen -G "/tmp/someFiles*" > /dev/null; then
    echo "Some files exist."
fi
2022-04-26