回声在一段时间后显示bash中的错误变量值.为什么



我想快速脚本来计算我的.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";

最新更新