루프 후 bash 스크립트 var가 변경되지 않았습니다.

루프 후 bash 스크립트 var가 변경되지 않았습니다.

저는 bash 스크립팅을 처음 접했고 wc -c명령을 시뮬레이션하기 위해 다음 스크립트를 작성했습니다. (줄 끝을 계산하지 않는다는 것을 알고 있습니다.)

#!/bin/bash

echo $1
len=0
cat $1 | while read line
do
    let len+=${#line}
    echo $len
done
echo $len

출력은 다음과 같습니다.

xyz.sh
11
11
18
27
51
53
70
79
83
92
0

len반복 해서 시도한 후에도 변경 사항이 지속되지 않는 이유는 무엇입니까 ?

답변1

이는 while루프가 하위 쉘에서 실행되기 때문에 발생합니다. 하위 쉘의 변수 수정은 상위 쉘에 영향을 주지 않습니다.

cat일부 리디렉션을 수행하여 파이프와 불필요한 사용을 피하세요.

while read line
do
    let len+=${#line}
    echo $len
done < $1

여기에는 하위 쉘이 필요하지 않으므로 변경 사항이 $len상위 쉘에 표시됩니다.

관련 정보