Не понимаю, почему такое работает
for ((i=0;i<3;i++)); do
counter=0
for ((n=0;n<10;n++)); do
counter=$((counter+1))
done
echo $counter
done
10
10
10
А вот такое нет
#!/bin/bash
find -maxdepth 1 -mindepth 1 -type d -print0 | while IFS= read -r -d '' tv_show; do
let total_bitrate=0
let total_videos=0
find "$tv_show" -type f -regextype posix-egrep -regex ".*\.(avi|mkv|mp4)" -print0 | while IFS= read -r -d '' file_path; do
bitrate=$(ffprobe -v error -show_entries format=bit_rate \
-of default=noprint_wrappers=1 "$file_path" \
| awk -F= '{print $2}')
total_bitrate=$((total_bitrate+bitrate))
total_videos=$((total_videos+1))
echo $file_path $total_bitrate $total_videos
done
echo "$tv_show $total_videos $total_bitrate"
done
Смысл этого костыльного скрипта - посчитать средний битрейт для всех файлов в каждой из директорий. Пока расчет среднего я отложил, потому что в выводе
echo "$tv_show $total_videos $total_bitrate"
после вложенного цикла (по результатам посчета в директории) я по каждой из директорий получаю
./Имя_директории 0 0
Хотя в выводе внутри вложенного цикла
echo $file_path $total_bitrate $total_videos
все данные правильные: битрейт увеличивается, количество файлов тоже. Если дебажить с -x, то перед выводом после вложенного цикла внезапно появляется
+ IFS=
+ read -r -d '' file_path
+ echo './Имя_директории 0 0'
./Имя_директории 0 0
Я, очевидно, где-то накосячил, но в упор не вижу где. Вроде, здесь не нужны никакие дополнительне объявления глобальных переменных, т.к. у меня просто два вложенных цикла, и обе переменны total_videos
и total_bitrate
видны во всем скрипте. Так почему тогда в выводе после вложенного цикла подсчета по файлам я получаю два ноля?
Пример с выхлопом для одной из директорий (сначала без дебага, потом с дебагом) - https://pastebin.com/56h9ysMW