Echo在一段时间后在bash中显示错误的变量值。为什么?

时间:2017-12-07 13:41:47

标签: bash shell echo

我想制作一个快速脚本来计算我的.scala文件所包含的行数:

presto-base-jdbc

但不幸的是,这打印

#!/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";

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

问题是由于您在while循环之前使用pipe而引起的。

通过这样做,bash会自动创建一个新的子shell。您执行的所有修改都将在新上下文中执行,并且在上下文关闭时不会传播。

改为使用process substitution

#!/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";