2014-02-15 195 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