对 Bash 来说非常陌生,对局部/全局变量/子shell 很困惑。我不确定为什么修改后的变量不会在函数末尾打印出来——我试图在文件末尾打印出最终的行数和文件数,但如果我这样做了,它只会打印out 0 因为它们是局部变量。有没有办法打印出修改后的值?
count=0
files=0
find . -type f | while IFC= read -r file;
do
let files=files+1
wc -l $file
count=$(($count+$(wc -l < $file)))
echo "total lines $count ; total files $files"
done
echo $files $count
exit 0
是的。但这绝对是不直观的。这将起作用,例如:
该
<(command)
构造称为“进程替换”,让您可以将命令的输出视为“文件”。以这种方式将其送入循环会使您的脚本按预期工作。问题是您使用管道 (
|
) 导致 while 循环在一个单独的子shell 中运行,该子shell 不能修改它之外的变量。在不支持该
<()
功能的 shell 中,您可以在 subsell 中运行管道右侧的命令,并在该子 shell 中包含最终的 echo: