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 ….

몇 가지 추가 팁:

관련 정보