由通配符引起的参数太多

时间:2011-07-18 06:50:02

标签: if-statement arguments sh

我写了一个shell脚本,并且脚本的一部分失败了,它说了太多的论点:

if [ -f ABC_DEF_*.* ]; then

我想要做的是测试是否有任何这样的文件匹配字符串,但shell抱怨参数太多了。在目录中有20个这样的文件。

shell是否扩展了通配符并将ABC_DEF_ 转换为20个文件名列表? 如果是,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题在于您无法使用[ -f <more then one> ]。它甚至没有意义:当所有文件存在或至少存在一个文件时,它是返回true吗?

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

答案 1 :(得分:1)

您可以使用[ -f <filename with wildcard> ]。如果存在一个或多个文件与文件名与通配符匹配,则返回true,但需要注意的是,如果有多个文件匹配而不是if语句可以使用,则会抛出“太多”错误并且不执行if块。如果if语句是[ ! -f <filename with wildcard> ],它将在所有情况下按预期工作。 话虽如此,您的解决方案适用于操作所需的行为(并且在发生错误时不会反转逻辑)。