저는 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
상위 쉘에 표시됩니다.