我有这样的shell脚本,我正在读取文件并计算行号。 我从processsNumber函数
中获取了1,2,3,4 ..等日志#!/bin/bash
number=0;
processNumber () {
((number++));
echo "$number";
}
grep -E '*' readme.txt | while read -r line ; do
processNumber "$line";
done;
echo "And at last $number";
但它记录了
"And at last 0"
,但我期待最后一个行号。
为什么会那样?是因为gres读取文件是一个assync调用因此echo必须是对它的回调。
或者是否无法在函数外部跟踪全局变量更改。?
如何通过更改grep和pipe来解决这个问题?
注意:我的目标找不到文件中的行数,但要理解这个
答案 0 :(得分:4)
但它记录了#34;最后0"
这是因为您使用管道调用processNumber
函数,这使得它在不在主shell中的子shell中执行,因此父shell变量保持不变为0
。
更新:为避免创建管道(和子shell),请使用for
这样的循环:
while read -r line; do
processNumber "$line"
done < readme.txt