我有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 :(得分:1)
因为你使用扩展表达式,所以使用双直括号而不是如下所示。
if [[ ! -f "$BASE_DIR/$i"* ]];
需要检查数组内容。必须转义文件名中作为''(空格)的特殊字符。
答案 1 :(得分:1)
-f
仅使用一个参数,因此当模式匹配多个文件时会发生错误。
似乎与[[
一起使用,虽然我找不到任何关于为什么的文档。
更大的问题是你也只能在<
运算符中使用一个文件;如果模式匹配多个文件,则会出现模糊的重定向错误。要解决此问题,您需要使用cat
:
cat "$BASE_DIR/$i"*.tab | wc -l
然而,目前尚不清楚您对输出的期望; ARRAY2
实际上不是数组。