2016-07-01 31 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