我想快速脚本来计算我的.scala文件的行数:
#!/bin/bash
counter=0;
find -iname "*.scala" | while read f; do
lc=$(cat $f | wc -l);
counter=$((counter+lc));
echo "$lc $counter";
done
echo "final result: $counter";
,但不幸的是,这打印
20 20
204 224
212 436
final result: 0
这里怎么了?
该问题是因为您在循环之前使用管道而引起的。
这样做,bash
会自动创建一个新的子壳。您进行的所有修改将在新上下文中执行,并且在上下文关闭时不会传播。
使用过程替代:
#!/bin/bash
counter=0;
while read f; do
lc=$(cat $f | wc -l);
counter=$((counter+lc));
echo "$lc $counter";
done < <(find -iname "*.scala")
echo "final result: $counter";