2014-02-15 232 views
3

所以我幾乎可以保證這是一個愚蠢的問題,但我無法弄清楚這一點。我正在計算我爲索引文件編制了多少次。每當我找到符合特定條件的pdf文件(它的元數據必須包含3個特定值)時,我需要增加一個計數器。有問題的變量是indexCount和我標誌着在那裏我試圖用#NOT一定要增加它在該線上行在函數bash中增加變量值

index() { 
    for file in * 
    do 
     [ -d "$file" ] && (cd "$file"; index) 
     oldPath=$(pwd) 
     if [ "$(echo "$file" | grep -E '.*\.pdf')" ]; then 
      metadata="$(pdftk "$file" dump_data)" 

      echo "$metadata" | $(grep -e '^InfoKey: Title' >/dev/null 2>&1) && echo "$metadata" | $(grep -e '^InfoKey: Author' >/dev/null 2>&1) && echo "$metadata" | $(grep -e '^InfoKey: CreationDate' >/dev/null 2>&1) 
      if [ $? -eq 0 ]; then 
       path="$(pwd)/""$file" 
       title=$(getAttr "$metadata" '^InfoKey: Title') 
       author=$(getAttr "$metadata" '^InfoKey: Author') 
       creation=$(getAttr "$metadata" '^InfoKey: CreationDate') 

       authorsArray=($(getAuthors "$author")) 

       for auth in "${authorsArray[@]}"; 
       do 
        createFolders "$auth" "$creation" "$title" "$path" "$oldPath" 
       done 

       $1=$(($1+1)) #NOT SURE ABOUT THIS LINE 
      fi 
     fi 
    done 

    echo $1 
} 

indexCount=0 
index $indexCount 
+3

的選項,會少些麻煩,如果你給那_only_覆蓋遞增測試情況下,與其他一些代碼混合在一起的測試用例(可能或不可能正常工作)相反。 (對於增量問題有一個很好的答案,但所有其他問題都混合在一起使得討論它的正確性變得更加困難)。 –

回答

2

正確的語法是:

var=$((var+1)) 

所以不是

$1=$(($1+1)) 

您應該使用變量名加上面指出的語法。一般來說,記住bash變量是在沒有$的情況下設置的並且與它一起使用。

從查爾斯達菲報價:

如果定位慶典而不是POSIX sh的,也有不少世界((++var))((var += 1))

+0

好吧,我用indexCount = $((indexCount + 1)替換了$ 1 = $(($ 1 + 1)),並用echo $ indexCount回顯$ 1,但現在它會打印5 1 0與我的測試數據。 6.我怎麼去解決這個問題? – user1443362

+0

我不知道這些值來自哪裏,但要確保每次循環顯示文件時都要打印indexCount來正確地遞增,然後我們會看到什麼是錯誤的。 ,請參閱http://tldp.org/LDP/abs/html/dblparens.html – fedorqui

+0

我剛剛列出的值與符合我在文章中提到的要求的文件相對應,所以它每次達到它時都會增加indexCount,但它出現了每次它在通過文件夾遞歸時調用索引時,它都會重置indexCount的值,儘管它是全局的。 – user1443362