![如何检查 glob 模式是否返回任何内容](https://linux22.com/image/186699/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%20glob%20%E6%A8%A1%E5%BC%8F%E6%98%AF%E5%90%A6%E8%BF%94%E5%9B%9E%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9.png)
如何检查是否/var/some-dir/*
返回任何东西?
我使用find /var/some-dir/* ...
,但如果模式为空,我会收到错误。我不想重定向stderr
。
我想在执行之前检查find
该模式是否会返回任何内容或错误
答案1
您应该能够处理返回值。
如果find
以这种方式使用时什么也没找到,它会返回1
,所以你可以这样做
find /var/some-dir/*
if [[ $? -eq 1 ]]
then
perform_failure_action
fi
如果您想事先检查一下,您可以尝试以下操作:
shopt -s nullglob
f=/var/some-dir/*
if [ -z $f ]
then
printf -- "No such file!\n"
else
find /var/some-dir/*
fi
该shopt
行将确保如果没有文件与 glob 模式匹配,它将扩展为空字符串,然后可以通过-z
.
在这种情况下,请确保不是引用$f
你的想该测试中的全局扩展。出于同样的原因,您必须使用单括号测试运算符,不是双括号运算符,可以为被测变量实现自己的“保护”方案。
或者,如果您使用支持它的 shell(例如 Bash),则可以使用compgen
带有该-G
选项的内置命令。这将生成提供给它的 glob 模式 ( ) 的补全列表,并且如果存在匹配则-G
返回:true
if compgen -G /var/some-dir/*
then
find /var/some-dir/*
else
printf -- "No such file!\n"
fi