Дилемма "Скорлупа" в Bash

я хочу вычислить все * bin-файлы в данном каталоге. Изначально я работал с:for-loop

var=0
for i in *ls *bin
do
   perform computations on $i ....
   var+=1
done
echo $var

Однако в некоторых каталогах слишком много файлов, что приводит к ошибке:Argument list too long

Поэтому я пробовал это с помощью канала:while-loop

var=0
ls *.bin | while read i;
do
  perform computations on $i
  var+=1
done
echo $var

Проблема сейчас в том, что с помощью труб создаются подоболочки. Таким образом,echo $var возвращается.0

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

Оригинальный код: A

#!/bin/bash

function entropyImpl {
    if [[ -n "$1" ]]
    then
        if [[ -e "$1" ]]
        then
            echo "scale = 4; $(gzip -c ${1} | wc -c) / $(cat ${1} | wc -c)" | bc
        else
            echo "file ($1) not found"
        fi
    else
        datafile="$(mktemp entropy.XXXXX)"
        cat - > "$datafile"
        entropy "$datafile"
        rm "$datafile"
    fi

    return 1
}
declare acc_entropy=0
declare count=0

ls *.bin | while read i ;
do  
    echo "Computing $i"  | tee -a entropy.txt
    curr_entropy=`entropyImpl $i`
    curr_entropy=`echo $curr_entropy | bc`  
    echo -e "\tEntropy: $curr_entropy"  | tee -a entropy.txt
    acc_entropy=`echo $acc_entropy + $curr_entropy | bc`
    let count+=1
done

echo "Out of function: $count | $acc_entropy"
acc_entropy=`echo "scale=4; $acc_entropy / $count" | bc`

echo -e "===================================================\n" | tee -a entropy.txt
echo -e "Accumulated Entropy:\t$acc_entropy ($count files processed)\n" | tee -a entropy.txt

Ответы на вопрос(3)

Ваш ответ на вопрос