Bash - 预期的二元运算符

时间:2016-07-01 11:25:26

标签: 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

2 个答案:

答案 0 :(得分:1)

因为你使用扩展表达式,所以使用双直括号而不是如下所示。

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

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

答案 1 :(得分:1)

-f仅使用一个参数,因此当模式匹配多个文件时会发生错误。

似乎[[一起使用,虽然我找不到任何关于为什么的文档。

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

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

然而,目前尚不清楚您对输出的期望; ARRAY2实际上不是数组。