我写了一个shell脚本,并且脚本的一部分失败了,它说了太多的论点:
if [ -f ABC_DEF_*.* ]; then
我想要做的是测试是否有任何这样的文件匹配字符串,但shell抱怨参数太多了。在目录中有20个这样的文件。
shell是否扩展了通配符并将ABC_DEF_ 。转换为20个文件名列表? 如果是,我该如何解决这个问题?
答案 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> ]
,它将在所有情况下按预期工作。
话虽如此,您的解决方案适用于操作所需的行为(并且在发生错误时不会反转逻辑)。