If statement 由通配符引起的参数太多

If statement 由通配符引起的参数太多,if-statement,arguments,sh,If Statement,Arguments,Sh,我编写了一个shell脚本,脚本的一部分失败了,它说了太多的参数: if [ -f ABC_DEF_*.* ]; then 我想做的是测试是否有任何这样的文件与字符串匹配,但是shell抱怨参数太多。目录中有20个这样的文件 是否是shell扩展了通配符,并将ABC_DEF_2;打开。进入20个文件名的列表? 如果是,我如何解决此问题?问题是您不能使用[-f]。它甚至没有意义:当所有文件都存在或至少有一个文件存在时,它是否返回true 如果您想测试是否存在,请执行NUM=$(ls | wc-l

我编写了一个shell脚本,脚本的一部分失败了,它说了太多的参数:

if [ -f ABC_DEF_*.* ]; then
我想做的是测试是否有任何这样的文件与字符串匹配,但是shell抱怨参数太多。目录中有20个这样的文件

是否是shell扩展了通配符,并将ABC_DEF_2;打开。进入20个文件名的列表?
如果是,我如何解决此问题?

问题是您不能使用
[-f]
。它甚至没有意义:当所有文件都存在或至少有一个文件存在时,它是否返回
true

如果您想测试是否存在,请执行
NUM=$(ls | wc-l)

您可以使用
[-f]
。如果存在一个或多个与通配符的文件名相匹配的文件,则返回true,但需要注意的是,如果存在比if语句可以使用的文件更多的匹配文件,则会抛出“过多”错误,并且不会执行if块中的语句。如果If语句是
[!-f]
,那么它在所有情况下都能正常工作。 话虽如此,您的解决方案适用于op所需的行为(并且在错误发生时不会反转逻辑)