2014-02-15 4 views
3

Поэтому я могу почти гарантировать, что это глупый вопрос, но я просто не могу понять это. Я пытаюсь подсчитать, сколько раз я индексировал файлы. Мне нужно увеличивать счетчик каждый раз, когда я нахожу файл PDF, соответствующий определенным критериям (метаданные должны содержать 3 определенных значения). Переменная в вопросе indexCount и я пометил строку, в которой я пытаюсь увеличить его с #NOT SURE О ЭТОЙПриращение переменной значения в функции 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

Было бы меньше проблем, если вы дали тест, который _только_ охватывает приращение, а в отличие от тестового примера с кучей другого кода (который может или не может работать правильно), смешанного с ним. (Есть хороший ответ, заданный для проблемы с приростом, но все другие вещи, которые смешиваются с проблемой, затрудняют обсуждение ее правильности). –

ответ

2

Правильный синтаксис:

var=$((var+1)) 

Таким образом, вместо

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

Вы должны использовать имя переменной плюс синтаксис, указанный выше. В общем случае помните, что переменные bash задаются без $ и используются вместе с ним.

Цитируя Чарльза Даффи:

Если таргетинг Баш в отличие от POSIX ш, есть также возможность ((++var)) или ((var += 1))

+0

Итак, я заменил $ 1 = $ (($ 1 + 1)) на indexCount = $ ((indexCount + 1) и echo $ 1 с echo $ indexCount. Но теперь он печатает 5 1 0 с моими тестовыми данными. Мне нужно распечатать 6. Как мне это сделать? – user1443362

+0

Я не знаю, откуда берутся эти значения, но убедитесь, что вы правильно увеличиваете его, печатая 'indexCount' каждый раз, когда вы зацикливаете свои файлы. Затем мы увидим, что может быть неправильным. , см. http://tldp.org/LDP/abs/html/dblparens.html – fedorqui

+0

Значения, которые я только что перечислил, соответствуют файлам, которые отвечают требованиям, указанным в моем сообщении. Таким образом, он увеличивает индексный счет каждый раз, когда он достигает его, однако он появляется что каждый раз, когда он вызывает индекс при рекурсии через папки, он сбрасывает значение indexCount, несмотря на то, что он является глобальным. – user1443362

Смежные вопросы