Конкатенация строк в скрипте Bash - PullRequest
1 голос
/ 27 октября 2011

Я пишу этот скрипт на Bash:

count=0   
result

for d in `ls -1 $IMAGE_DIR | egrep "jpg$"`
do

    if (( (count % 4) == 0 )); then
                result="abc $d"

                if (( count > 0 )); then
                    echo "$result;"
                fi

        else
            result="$result $d"
        fi

        (( count++ ))

done

if (( (count % 4) == 0 )); then
    echo $result
fi

Сценарий должен объединять строки деталей в строку, когда значение делится на 4, и оно должно быть больше 0.

В IMAGE_DIR у меня 8 изображений,

Я получил такие выводы:

abc et004.jpg
abc et008.jpg

Но я ожидал бы иметь:

abc et001.jpg et002.jpg et003.jpg et004.jpg;
abc et005.jpg et006.jpg et007.jpg et008.jpg;

Как я могу это исправить?

Ответы [ 3 ]

7 голосов
/ 27 октября 2011

Оператор = всегда должен быть записан без пробелов:

result="$result $d"

(Практически самое важное отличие от программирования оболочки до нормального программирования заключается в том, что пробел имеет значение в местах, где вы этого не ожидаете.

2 голосов
/ 27 октября 2011

Как то так?

count=0   

find $IMAGE_DIR -name "*.jpg" |
while read f; do
        if (( (count % 4) == 0 )); then
                result="abc $f"

                if (( count > 0 )); then
                        echo $result
                fi

        else
                result="$result $d"
        fi

        (( count++ ))
done
1 голос
/ 27 октября 2011

Примерно так (непроверено, конечно):

count=0 result=

for d in "$IMAGE_DIR"/*jpg; do
   (( ++count % 4 == 0 )) &&
     result="abc $d"
   (( count > 0 )) &&
     printf '%s\n' "$result" ||
      result+=$d
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...