bash 脚本 var 循环后未更改

bash 脚本 var 循环后未更改

我对 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循环正在子 shell 中运行。子 shell 中的变量修改不会影响父 shell。

cat通过进行一些重定向来避免管道和无用的使用:

while read line
do
    let len+=${#line}
    echo $len
done < $1

这不需要子 shell,因此更改$len将在父 shell 中可见。

相关内容