Bashが私の変数を一緒に追加しないのはなぜですか?

Bashが私の変数を一緒に追加しないのはなぜですか?

ファイルの数値平均を計算するシェルスクリプトを作成していますが、何らかの理由でbashは私の数値を合計しません。

sum = 'expr $ sum + $ num'の形式を指定するいくつかの方法を試しましたが、引き続きエラーが発生します。

while read line
do  
    sum=0
    count=0
    average=0
    median=0

    #read each line, sort it and put it into tempRows file
    echo "$line" >> $tempRow
    sort $tempRow

    #add each number to the sum for avg calculation
    for i in $tempRow
        do
        num=$i
        count=`expr $count + 1`
        echo "count: $count"
        sum=`expr $sum + $num`
        echo "sum: $sum"    
        done

    #perform and print average calc at the end of each line
    average=`expr $sum / $count`

    echo -e "$average\t"

    rm -f $tempRow
done < $tempFile

現在、このコードは終了する前に次の出力を提供します。

count: 1
expr:non-numeric argument
sum:
expr:syntax error

後で中央値を計算するためにtempRowに追加する前に、各行をソートします。サンプルファイルには複数の行と整数の列が含まれており、各行の平均値と中央値を印刷します。

答え1

ランニングbash -x myscript。これにより、実行追跡が提供され、問題が明確になります。

あなたの主な質問は

for i in $tempRow

この変数$tempRowにはファイル名が含まれています。ファイル名にスペースやワイルドカードが含まれていないと仮定すると、$tempRowファイル名という単語を含むリストに展開されます。したがって、for ループ本体は一度実行され、iファイル名に設定されます。

ファイルの行を繰り返すようです。これに使用されますwhile read。具体的には、while IFS= read -r i; do …

いくつかの追加のヒント:

関連情報