我对 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 中可见。