2016-07-01 32 views
1

我有bash脚本来计算报告中的行数。我有一个数组,其中所有的报告名称都存储在循环中,我正在计数行。但是对于一些文件,我的脚本收到二元运算符预期的错有人有解决方案吗?Bash - 二元运算符预计

for i in ${ARRAY[@]}; do 
if [ ! -f "$BASE_DIR/$i"* ]; 
then 
     echo "File not generated yet" 
else 
     ARRAY2=$(wc -l < "$BASE_DIR/$i"*.tab | awk '{print $1-2}') 
     echo ${ARRAY2[$i]} $i 
fi 
+0

您可能已经意识到'*'在这种情况下会出现globbing – sjsam

+0

globbing是故意使用的,因为文件名和扩展名之前也有文本 – ulsterboy

+1

sjsam感谢帮助,出现问题 – ulsterboy

回答

1

因为您使用扩展表达式,所以使用双直括号代替1。

if [[ ! -f "$BASE_DIR/$i"* ]]; 

需要检查数组内容。文件名中的特殊字符''(空格)必须转义。

1

-f只需要一个参数,因此当模式匹配多个文件时发生错误。

似乎[[工作,虽然我无法找到任何文件以为什么它。

更大的问题是,您也可以只使用一个文件与<运算符;如果模式匹配多个文件,则会出现模糊的重定向错误。为了解决这个问题,你需要使用cat

cat "$BASE_DIR/$i"*.tab | wc -l 

但是,目前还不清楚你是从输出期望是什么; ARRAY2实际上不是一个数组。

+0

是啊, sjsam提到的问题是globbing,我发现最后有一些带有.bak的文件 – ulsterboy